首发于 你今天真好看
数据编码

数据编码

每种编码模式都使用不同的方法将文本转换为二进制数字,并且使用尽可能短的二进制数字来编码数据。

本文主要讲解二维码的详细编码过程。

1. 选择错误校正级别

在编码数据之前,首先应当选择错误校正级别。如前文中所述,二维码使用 里德-所罗门码。该过程基于编码数据创建纠错码,二维码阅读器可以使用这些纠错码来确定它是否正确地读取数据,并且可以使用纠错码来纠正错误。

二维码中有四种级别的纠错:L,M,Q,H。

下表列出了级别及其纠错能力:

注意: 更高级别的纠错需要更多的字节,因此纠错级别越高,二维码尺寸就越大。

2. 确定数据的最小版本

二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸。

计算公式是:(V-1)*4 + 21(V是版本号)。

最高Version 40,(40-1)*4+21 = 177,所以最大是177 x 177 的正方形。

每个版本都有最大容量,具体取决于使用的模式。此外,纠错级别也进一步限制容量。

字符容量表列出了给定编码模式和纠错级别的所有二维码版本的容量。

2.1 如何确定最小的版本

计算要编码的字符数,并确定对应编码模式的包含的字符数量和符合纠错级别的最小版本。

举个栗子。

字符串 HELLO WORLD 有11个字符。 假设纠错级别为 Q。查看 字符容量表,发现版本1下纠错级别Q在字符模式下只能包含10个字符。因此,在这种情况下可以使用的最小版本是版本2。

2.2 最大限制

二维码的最高容量是40-L,Version 40 & Error correction level L。
下面的表格列出了40-L 二维码对应四种编码模式的容量。这是单个二维码可以包含的最大可能字符数。版本40-M,40-Q和40-H具有较低的容量,因为它们将更多的空间用于纠错码。

3 增加模式指示符

每个编码模式都具有指示它的四位模式指示符。编码数据必须以适当的模式指示符开始,用于指示后面的位串的模式。

举个栗子,如果以字符模式编码HELLO WORLD,模式指示符为0010。

下表列出了每种模式的模式指示符:

4 增加字符计数指示符

字符计数指示符是一串二进制数字(位串),表示正在编码的字符数。字符计数指示符必须放在模式指示符之后。此外,字符计数指示符有特定的位长,具体取决于二维码的版本和编码模式。

具体步骤是:

计算原始输入文本的字符数,将其转为二进制数字。根据版本和编码模式找到对应的位长,不够位长的在前面加0补齐。

举个栗子:

举个栗子,如果以字符模式编码HELLO WORLD,版本号为1,则字符计数指示符必须为9位长。

HELLO WORLD的字符数为11。在二进制中,11为1011。

在左侧填充0,使其长度达到9位:000001011。

将这个指示符放在模式指示符之后,获得以下位串:0010 000001011。

下表列出了每种版本的对应的字符计数指示符位长:

5 使用所选模式进行编码

上文数据分析中解释了如何为给定字符串选择适当的编码模式。点击下面的链接,了解每种模式的编码过程。

6 分成8位码字和添加补齐码(如果必要的话)

在获得由模式指示符,字符计数指示符和数据位组成的位串之后,可能需要添加0和补齐码,因为二维码规范要求位串必须完全填充二维码的总容量。

以下部分说明将0和补齐码添加到位串的过程。

6.1 确定此二维码所需的位数

要确定特定QR码需要多少数据位,请参阅 纠错表。

找到当前文本生成二维码所使用的版本和错误纠正级别,并在标有“数据码字总数”的对应列中找到该编号。将此数乘以8以获得此版本和纠错级别所需的数据位的总数。

例如,根据该表,二维码 1-Q 具有13个总数据码字。因此,该QR码所需的总比特数为13×8 = 104比特。

6.2 添加终止符(如有需要)

如果位串小于所需位的总数,则必须在字符串的右侧添加最多四个0的终止符。

如果所需位数比位串大四位及以上,则将四个0加到结尾。否则只添加达到所需位数所需的0的个数。

例如,如果在 1-Q 的二维码中编码HELLO WORLD,则所需比特的总数是104比特。而步骤五中HELLO WORLD数据位字符串为74位长。终止符的长度最多只能为4位,因此在字符串的右侧添加4个0。结果字符串仍然太短,无法填充104位容量,但二维码规范要求终止符的长度最多为4个0。如果字符串已经是102位,则终止符的长度将仅为2位。

下面是添加了终止符的HELLO WORLD字符串示例:

6.3 添加更多0,使长度为8的倍数

添加终止符后,如果字符串中的位数不是8的倍数,首先使用0来填充右侧的字符串,使字符串的长度为8的倍数。

例如,在将终止符添加到HELLO WORLD字符串之后,长度变为78位长。这不是8的倍数。位串显示为8位二进制字节:

00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 010000

最后有六位。添加两个0使其成为8位二进制字节:

00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000

6.4 如果字符串仍然太短,则添加补齐码(Pad Bytes)

如果字符串仍然不足以填充最大容量,请将以下字节添加到字符串的末尾,不断重复,直到字符串已达到最大长度:

11101100 00010001

这些字节分别等于236和17,二维码针对在6.3后字符串仍然太短的情况特别规定了补齐码(Pad Bytes)。

例如,上面的HELLO WORLD字符串为80位长。而1-Q二维码所需的容量为104位。

需要填充的位数为104 - 80 = 24.

将它除以8:24/8 = 3.

因此,必须将三个填充字节添加到数据字符串的末尾。如下所示:

00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100


下一节: >> 生成纠错码

资讯网公众号 营销营销推广互联网推广网络营销八字十神算命口诀大全两个字的生鲜超市起名女生个性签名武汉中百电器网站优化得费用周易八卦起人名大全手机商城网站设计唐亮全国养生连锁店起名字带钰关于网站建设的网站丁长生杭州网站排名优化工具纯手工饺子店起名低俗喜剧下载生辰八字算命称重戴氏宝宝起名取名大全上班族如何理财seo推广免费推广鲜榨果汁起名大全集周公解梦梦见金子网站建设公司哪里好大暑中医养生设计网站 海报网络推广网站优化推广看生辰八字算命准吗广告推广营销的公司哈尔滨专业网站设计少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化