Java教程

二维码的秘密(生成原理)

本文主要是介绍二维码的秘密(生成原理),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

这里所说的二维码默认指的就是我们经常用到的微信二维码这样方形格式的,二维码的英文全称是 Quick Response Code,快速响应矩阵图码。

我们简直不要太熟悉了,平均每天都要扫码好几次,做核酸扫码、吃饭付钱扫码、进出办公楼扫码。

就像上面这样,二维码就是用黑白或者明暗的格子来分别代表1和0,用黑色代表1,白色代表0,将0和1连接成二进制串,就能幻化出各种各样的内容,当然其中要经过各种算法、编码、解码等操作。

这是公众号的二维码,里面存储的内容其实就是一个链接地址,也就是一段文本内容,然后用微信扫码或者直接长按识别后,经过微信二维码识别程序的处理,将其中的内容读取出来,并且经过一系列的检测,判断这是微信公众号的二维码,于是跳转到公众号主页。

那二维码存储的不都是文本吗,不管是链接还是什么其他的东西,都是将二维码解析之后再做处理,是链接就跳转、是纯文本就显示。是这样没错,但是毕竟二维码最后是以图片的形式展示,还是要越小越好。

所以,二维码在最初设计的时候就制定了几种模式,每种模式都用最简便的编码方式处理,保证最后出来的二维码最简单。

二维码的几种模式

二维码说白了其实就是一种协议,和我们熟知的 IP、HTTP 协议类似,都是规定好一个标准,比如 IP 的头部信息,用4bit表示版本号,4bit表示首部长度等。

用4个bit标记当前二维码所采用的的模式,反应到二维码上就是4个格子。

数字编码模式

此模式对应的场景是内容全部都是数字的情况,标记为0001。

image-20221108103434511

字符编码模式

内容包含数字和大写的A-Z(不包含小写)、以及$ % * + – . / : 和空格,标记为 0010 。

字节编码模式

支持0x00~0xFF内所有的字符,标记为 0100。

Kanji mode

日文模式,因为二维码是日本的工程师发明的,双字节编码,这个模式下也可以支持中文,标记为 1000 。

中文

支持中文,一个中文占3个字节,标记为 1101 。

混合模式

同时支持多种编码格式,可以包含中文、应为、数字等内容,标记为 0011 。

ECI

用于特殊字符,标记为 0111 。

FNC1

主要是给一些特殊的工业或行业用的,比如GS1条形码之类的。

二维码版本的概念

二维码版本是从0到40,每增加一个版本,在现有基础上横向增加4行、纵向增加4列,计算公式为(V - 1) * 4 + 21,其中V是版本号,比如版本是1,就是横竖各21个格子,版本号是2,就是横竖各25个格子。

例如下图,其中内圈白色的版本号为1,格子数为 21 x 21,外圈加上了黄色的框,版本号为2,利用公式计算,其格子数为 25 x 25,横竖各增加了 4 个。

image-20221107224336185

标签:二维码,java,生成,扫码,微信,IP,公众号 来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

这篇关于二维码的秘密(生成原理)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!