首先找出版本号,方程式是 (格子边长 - 17) / 4, 因此上图是 (21 格 - 17) / 4 = Version 1。因此版本 2 的边长会多 4 格, 以此类推到 (177 格 - 17) / 4 = 最大的版本 40。对照某些表时,不同版本不同值, 例如 Character Count Indicator 长度, 所以需要版本号。
然后,找用来去掩码的掩模 (Mask pattern),左上寻像图形的正下方 (或左下的正右方) 的第 3-5 格。
三格全黑表示掩模方程式是 j%3 = 0。
解读方程式是从 0, 1, 2 ... 算起,j 是 x轴, i 是 y轴。
EC (Error Correction) Level 则是左上寻像图形 (或左下的正右方) 的第 1-2 格。
两格全黑表示 11 XOR 10(即固定 Mask pattern “10”1010000010010 的左边两个 bits) = 01, 即纠错能力(仅7%)最差的 L 级。因此一眼可见: 黑黑 L(7% 👎), 黑白 M(15%), 白黑 Q(25%), 白白 H(30% 👍)。这篇文我们不理这个。
把掩模从左上往右下盖着,黑格 1, 白格 0, XOR (即不一样才放黑, 1), 最右边形成 (从下往上读。由于掩模右两格都是白色, XOR 后仍然一样, 所以原图不需要改。):
寻像图形 (Finder/Position pattern/marker)
全白
格式信息 (format information)
1 0 结束, 0000 0001, 表示 Data 长度只有 1 个字节。
0 0
0 0
1 0 开始 Mode indicator。
0 1
1 0
0 0 开始 ECI 编码。
1 1 继续 -> 右上(1) -> 左上(1), 0111 表示 Mode Indicator 是 ECI。
1 0 开始。顺序: 右下(0) -> 左下(1)。每一行都是从右往左开始读, 不存在左往右。
扫 corner 转去左边的两 bits (从上往下读。掩模这里的两格是白黑, 所以左边不需要改, 只需想像左边纵的黑格是 1,想像右边纵的白格是 1 ):
寻像图形
全白
格式信息 (format information)
0 1
0 0
1 0 结束,0110 0001,表示 64+32+1=97,即 ASCII 的 “a”, 找到我们此次的目标。
0 0 由于剩下大于 4 够位, 所以继续 “结束符“。
0 0 结束,4 bit terminator 0000。
0 0 由于 so far 累积的总数是 36-bits ,36 (或最后的 codeword 仅是 4) 不是 8 的倍数, 所以加多 4 个 0 变成 40-bits。
0 0 结束,0000。
1 1
0 1
1 1
0 0
参考:
3. https://www.cnblogs.com/alantu2018/p/8504373.html
4. https://web.archive.org/web/20141129033352if_/http://raidenii.net/files/datasheets/misc/qr_code.pdf
4. https://web.archive.org/web/20141129033352if_/http://raidenii.net/files/datasheets/misc/qr_code.pdf