QR码设计(2)之数据编码

2017-05-15  本文已影响0人  只看你一眼

转载请注明出处


1.1选择纠错级

对数据进行编码前,需要选择数据的校正级别。QR码使用的是Reed-Solomon纠错。它是在编码数据的基础上创建纠错码字(字节)。根据纠错码字来确定QR码识别器有没有正确读取数据,并且可以纠正这些错误。纠错等级一共有四种,分别为L、M、Q、H。每个等级纠错数据的能力也不一样,见Table1所示。

Table1

1.2确定数据的最小版本

每个版本所含有的信息量不同,版本越高,承载信息量就越大。在实际设计中,我们应该根据要显示的信息大小选择最小的版本。

1.3添加模式选择代码

各种模式代码如Table2所示

Table2

各种版本所对应的不同编码模式字符串长度转换二进制后位数见Table3所示。

Table3

1.5四种编码模式的编码过程

1.5.1数字模式编码

①从左往右(或从高位到低位)3位一组

②将每组十进制数转换为10位二进制数

③末尾数字不足3位,可能是1位/2位,将其分别转换为4bits/7bits。

Eg2.5.1字符串为4637856

4637856→463 785 6

463→0111001111         6->0110

Result: 0111001111 1100010001 0110

Eg2.5.1字符串为46378568

4637856→463785 68

463→011100111168→1000100

Result: 0111001111 1100010001 1000100

1.5.2字母数字模式编码

①从左往右,2位一组

②查Table

3.2-4得出每一字符所对应的数字将每组转换为45进制数(满足公式a*45+b,a:高位数,b:为低位数),然后再将其转换为11bits二进制

③如果右边剩下一个字符,查Table

3.2-4所得的数字将转换为6bits二进制数

注意:字母数字模式编码所支持的字符都在Table4中,小写英文字母是不支持的。

Table4

Eg2.5.3UTER:H

UTER:H→UT ER:H

UT→30*45+29→1379→10101100011

Result:10101100011 01010010001 11111001101

Eg2.5.4 UTER:H%

UTER:H%→UTER :H %

UT→30*45+29→1379→10101100011

%→39→100111

Result:10101100011 01010010001 11111001101 100111

1.5.3字节模式编码

查JIS8表可得出其8bits二进制数。JIS8表见附录三

1.5.4汉字模式编码,

①先查表Shift  JIS Kanji Code Table得汉字编码是在0x8140到0x9ffc范围内,还是0xe040到0xebbf范围内;

②汉字编码在0x8140到0x9ffc范围内,则汉字编码减去0x8140,如果汉字编码在0xe040到0xebbf范围内,则汉字代码减去0xc140;

③然后把前两位拿出来乘以0xC0,然后再加上后两位,最后转成13bit的编码。

1.6结束符和补齐符

1.6.1结束码

结束码是一种标志,标志着数据编码的完成。它是由0000标志的。紧跟在数据代码之后。数据编码区此时为:数据编码=模式选择代码+字符长度代码+数据代码+结束码(0000)。

凑8bits整(指凑足8bits整倍数):这是在数据编码编码之后的。是由一串0组成,具体在数据编码后添加多少个0,是由数据编码被8整除后所需要添加最少的0的个数。就是保证此时的数据编码是8的整数倍。

1.6.2补齐码

不同版本和不同纠错级,所容纳的比特数也不同,不同版本和不同纠错级所容纳的比特数见附录四。而补齐码就是在我们确定好QR码的版本和纠错级后,判断数据编码的比特数在此版本和纠错级下比特数是否相等。那么就补11101100  00010001进行填充,如果一次填充还不足的话,可循环再次填充。直到其与比特数相同

1.7小结

该节主要讲述了二维码的数据编码。在进行数据编码时,我们要准备好所选择的QR码版本,纠错级,编码模式,字符串字符个数,要编码的数据,结束码,凑8bits整,补齐码。可用以下公式表示:数据编码=编码模式+字符长度+编码的数据+结束码+凑8bits整+补齐码。

备注:文中的数据编码在不同位置所表示的不一样,留给读者自己体会。

1.8实例

首先,我个人不喜换看太多文字,相信有和我一样的。那么在此,我就数据编码举个例子,让新手可以快速入手。

例:对XIAOXIAOYU520进行数据编码。

分析:XIAOXIAOYU520这一字符串中有大写字母和数字两种类型,我们可选择字母数字编码模式和字节模式,再看看其字符串长度为13。在此我们选择Q纠错级进行编码,查看附录二的表可知,应选择版本1,Q,字母数字模式编码。V1字母数字模式字符串长度用9bits表示(见Table3)。

答:①模式选择:0010字符串长度:13→000001101

②XIAOXIAOYU520→XI AOXI AO YU 52 0

→11000001100 00111011010 11000001100 00111011010

11001000101 00011100011 000000

④模式选择+字符串长度+数据的编码+结束符

0010 00000110111000001100

00111011010 11000001100 00111011010 11001000101 000111000110000000000

⑤凑8bits整

0010000001101110 00001100 00111011 01011000 00110000 11101101 01100100 0101000111000110 00000000 00000000

⑥V1-Q能容纳13个数据字见附录四表,即104字节。

104-12×8=8即补偿码为11101100

⑦模式选择+字符串长度+数据的编码+结束符+凑8bits整+补偿码

0010000001101110 00001100 00111011 01011000 00110000 11101101 01100100 0101000111000110 00000000 00000000 11101100

上一篇下一篇

猜你喜欢

热点阅读