目前最常用的QR码是由日本汽车公司Denso Wave的 Hara于1994年发明的。这种QR码被命名为Quick code,缩写为qr码。
因为我们只是大概了解一下原理,所以不涉及手工计算二维码。 毕竟第一步屏蔽需要进行大量的异或运算,这对于人类手工计算来说是相当困难的。
更具体的内容可以查看iso 18004文件
二维码的结构
三个显眼的大方块称为寻象图形。 事实上,一些二维码还可能隐藏着小方块(最小的二维码中没有),称为校正图形。 另外,内缘有黑白线连接相邻的两个取景图形,称为定位图形。 最后,三个取景图(左上取景图两侧各一行,右上取景图下侧,右上取景图右侧各一行)旁边会有一些格式信息。左下寻像图):
二维码解码-.jpg
剩余的浅绿色区域适合存储数据和纠错码。
值得一提的是,对于较大的二维码,即校正图案有6个及以上时,右上图搜索图案左边三行和左下图上方三行会有版本信息搜索模式。 事物,破译时也应避开这些地点:
二维码解码-.jpg
二维码的信息量和版本
QR 码有 40 个版本。 版本号越大,可以容纳的数据量越大。
版本 1 至 40 在水平和垂直方向上以 4 为增量。
最小版本尺寸为21x21
最大版本大小为
最大的二维码,使用最小的纠错码,可以存储7089个数字和1819个汉字。
因此,对于普通的二维码来说,往往保存一篇文章是不够的,所以会存储一些简单的配置信息或者URL。
如果用来存储二进制文件二维码解码器,它只能存储3kb左右的大小,所以用它来存储图像或音频是不现实的。
使用二维码传输文件并不实用。 3kb太小了,不足以写一篇文章。 也许结合其他压缩算法,比如zip,可以增加存储内容……
二维码解码-.png
稍微在中间
二维码解码-.png
二维码解码过程
二维码解码-.png
0. 寻像图形
三个角的三个方形取像图案是一个特殊的设计。 一方面,它们与其他常见模式不同,以防止误读。 取像图案的另外三个方块刚好可以确定二维码的矩形边界和起始位置(保留一角)
这三个图形的长、宽、大小都是固定的。
1.格式信息( )
格式信息位于第一个角,位于寻像方块的两侧,共15位。
二维码解码-.png
右侧和下方的另外两个寻像方块是作为备份的重复信息。
这 15 位包括:
• 5 个数据位:2 位用于指示使用何种Error Level,3 位用于指示使用何种Mask。
• 10个纠错位。主要通过BCH Code计算
2.摘下面罩
一般情况下,二维码是无法直接读取的。 他们通常都戴着面具。
因为未屏蔽的二维码可能存在大量连续的白块或连续的黑块,不利于机器识别。 (寻像块更容易识别)
使用遮蔽后,可以打乱黑白块的分布,使二维码更容易识别。
掩模图案共有以下 8 种。 编码时,算法将计算哪个掩码产生更合适的分布并选择它。
二维码解码-mask-.png
在步骤1中二维码解码器,我们从格式信息中找到所使用的掩码的编号。
那么我们只需要使用对应的掩码对数据区进行异或运算即可,非数据区不会发生变化。
如果摘下口罩后使用“扫一扫”扫描二维码,会发现无法扫描出来。
3.确定编码方式和大小
二维码中黑色为1,白色为0
二维码的读取从右下角(没有图像搜索图案的角)开始,以 Z 形图案向上读取。
前4位是编码方式,后面8位是编码长度。
编码长度的位数与QR码的大小有关。 当QR码达到一定大小时,编码长度也会有所不同,比如变成16位……
二维码解码-长度和编码方式-.jpg
总共有以下几种模式。
二维码解码-编码方式-.png
不同模式有不同容量
二维码解码-不同编码方式的能力-.png
4.开始解码
总之,按照下图,跳过中间的小方块和格式信息等非数据区域。
二维码解码-解码路线-.png
根据上一步确定的不同编码方式进行分析。
5. 纠错码
QR码中共有4个级别(Error Code Level)的纠错码。
纠错能力
L级
7%的字符可以被纠正
M级
15%的字符可以修正
Q等级
25%的字符可以被纠正
H级
30%的字符可以修正
QR码的纠错码采用Reed-纠错算法。
即rar压缩添加冗余校验信息似乎就是这种算法。
读取数据时,可以利用这些冗余代码进行验证。
因此,即使二维码部分损坏,仍然可以正确读取。
另外,如果用手挡住中间部分,可能不会影响阅读,因为阅读顺序是从右下角开始的。 如果数据量不大的话,可能会在右边读取......