前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >构建最终编码(四)

构建最终编码(四)

作者头像
TTTEED
发布2020-07-09 14:44:49
3830
发布2020-07-09 14:44:49
举报

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

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

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

纠错表链接:
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 位二进制,然后将所有二进制位无间断连接起来得到结果如下:

0100001111110110101101100100011001010101111101101110011011110111010001100100001011110111011101101000011000000111011101110101011001010111011101100011001011000010001001101000011000000111000001100101010111110010011101101001011111000010000001111000011000110010011101110010011001010111000100000011001001010110001001101110110000000110000101100101001000010001000100101100011000000110111011000000011011000111100001100001000101100111100100101001011111101100001001100000011000110010000100010000011111101100110101010101011110010100111010111100011111001100011101001001111100001011011000001011000100000101001011010011110011010100101011010111001111001010010011000001100011110111101101101000010110010011111100010111110001001011001110111101111110011101111100100010000111100101110010001110111001101010111110001000011001001100001010001001101000011011110000111111111101110101100000011110011010101100100110101101000110111101010100100110111100010001000010100000001001010110101000110110110010000011101000011010001111110000001000000110111101111000110000001011001000100111100001011000110111101100

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

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

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

01000011111101101011011001000110010101011111011011100110111101110100011001000010111101110111011010000110000001110111011101010110010101110111011000110010110000100010011010000110000001110000011001010101111100100111011010010111110000100000011110000110001100100111011100100110010101110001000000110010010101100010011011101100000001100001011001010010000100010001001011000110000001101110110000000110110001111000011000010001011001111001001010010111111011000010011000000110001100100001000100000111111011001101010101010111100101001110101111000111110011000111010010011111000010110110000010110001000001010010110100111100110101001010110101110011110010100100110000011000111101111011011010000101100100111111000101111100010010110011101111011111100111011111001000100001111001011100100011101110011010101111100010000110010011000010100010011010000110111100001111111111011101011000000111100110101011001001101011010001101111010101001001101111000100010000101000000010010101101010001101101100100000111010000110100011111100000010000001101111011110001100000010110010001001111000010110001101111011000000000

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

本文翻译自
https://www.thonky.com/qr-code-tutorial/structure-final-message
同时参考:
http://blog.sae.sina.com.cn/archives/1139
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TTTEED 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档