构建最终编码(四)

2020-07-09 14:44:49 浏览数 (1)

经过生成纠错码环节,目前我们已经拥有了数据编码和其对应的纠错码。最初我们提到过,较大的 QR 二维码需要我们数据码拆成小块,而且针对每一块生成对应的纠错码。在这种情况下,数据块和纠错码必须根据 QR 二维码规范穿插放置,本篇将解释该过程。

第一步:决定需要多少数据块和纠错码

纠错表展示了每种 QR 二维码版本在不同纠错级别下所需的数据块和纠错码数字。

代码语言:javascript复制
纠错表链接:
https://www.thonky.com/qr-code-tutorial/error-correction-table

注意,小型的 QR 二维码只包含一个数据块,相应地只有一组纠错码。这种情况下不需要穿插放置码块,直接将纠错码字节放在数据码字节后即可跳过本篇进入下一环节

将大型二维码拆分

在生成纠错码那一篇中,我们采用过一个 5-Q 二维码的例子,纠错表中可以查到 5-Q 码要分成 2 组,第 1 组包含 2 块,每块 15 个数据字节;第 2 组包含 2 块,每块 16 个数据字节。

同时由纠错表查得 5-Q 码的纠错码个数为每块 18 个,这里总共有 4 个块,所以需要 4 组 18 个的纠错码。生成结果如下:

接下来我们看下穿插放置码块的过程。

第二步:穿插放置码块

码块的穿插放置规则如下:

  1. 取第 1 块 的第一个数据码字节
  2. 接着取第 2 块的第一个数据码字节
  3. 接着取第 3 块的第一个数据码字节
  4. 接着取第 4 块的第一个数据码字节
  5. 接下来取第 1 块的第二个数据码字节
  6. 依次类推。。。

即先取第一列,再第二列等,最终得到 67,246,182,... ,7,236

对数据码字节排列完,同样的逻辑接着排列纠错码:

先取第一列一直到最后,最终得到 213,87,148,... ,141,236

最终将两组放到一起得到我们的数据区:

67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236

第三步:转化为二进制

接下来要将每个数字转化为 8 位二进制,然后将所有二进制位无间断连接起来得到结果如下:

代码语言:javascript复制
0100001111110110101101100100011001010101111101101110011011110111010001100100001011110111011101101000011000000111011101110101011001010111011101100011001011000010001001101000011000000111000001100101010111110010011101101001011111000010000001111000011000110010011101110010011001010111000100000011001001010110001001101110110000000110000101100101001000010001000100101100011000000110111011000000011011000111100001100001000101100111100100101001011111101100001001100000011000110010000100010000011111101100110101010101011110010100111010111100011111001100011101001001111100001011011000001011000100000101001011010011110011010100101011010111001111001010010011000001100011110111101101101000010110010011111100010111110001001011001110111101111110011101111100100010000111100101110010001110111001101010111110001000011001001100001010001001101000011011110000111111111101110101100000011110011010101100100110101101000110111101010100100110111100010001000010100000001001010110101000110110110010000011101000011010001111110000001000000110111101111000110000001011001000100111100001011000110111101100

第四步:如果需要则补充剩余字符

对有些 QR 版本,最终生成的二进制位并不够长来满足需要的位数,这时需要在最终信息后面添加特定数目的 0 位来满足长度要求。这些多余的 0 位被称作剩余字符。例子中用到的版本 5 的 QR 二维码,需要在最后添加 7 位 0 的剩余字符。

最终我们得到 62 字节数据码、4 * 18 字节纠错码 共计134 字节即 1072 位,再加上 7 位剩余字符,共计 1079 位二进制串作为最终编码得出的数据:

代码语言:javascript复制
01000011111101101011011001000110010101011111011011100110111101110100011001000010111101110111011010000110000001110111011101010110010101110111011000110010110000100010011010000110000001110000011001010101111100100111011010010111110000100000011110000110001100100111011100100110010101110001000000110010010101100010011011101100000001100001011001010010000100010001001011000110000001101110110000000110110001111000011000010001011001111001001010010111111011000010011000000110001100100001000100000111111011001101010101010111100101001110101111000111110011000111010010011111000010110110000010110001000001010010110100111100110101001010110101110011110010100100110000011000111101111011011010000101100100111111000101111100010010110011101111011111100111011111001000100001111001011100100011101110011010101111100010000110010011000010100010011010000110111100001111111111011101011000000111100110101011001001101011010001101111010101001001101111000100010000101000000010010101101010001101101100100000111010000110100011111100000010000001101111011110001100000010110010001001111000010110001101111011000000000

其中 40 种 QR 二维码对应的剩余字符的位数可以在文末链接中找到。

代码语言:javascript复制
本文翻译自
https://www.thonky.com/qr-code-tutorial/structure-final-message
同时参考:
http://blog.sae.sina.com.cn/archives/1139

0 人点赞