1、第一步:数据编码第二步:结束码和补齐码第三步:纠错码第四步:最终编码Numeric Mode(数字编码)Alphanumeric modeAlphanumeric mode(字符编码)(字符编码)Chinese ModeChinese Mode(中文编码)(中文编码)其他其他一共有40种版本,从1到40。每一种版本有4种纠错级。编码:1-H版本中的“01234567”首先将输入的数据每三位分为一组,将每组数据转换为10位二进制数据。余下的一或两位转换为4或7位的二进制数据01234567012345670120123453456767012012000000110034534501010110
2、0167671000011000000110001010110011000011000000110001010110011000011000000110001010110011000011在数据二进制之前加上字符个数的二进制数据(这个二进制数据的个数由表三决定)。1-H版本为10位,“01234567”有8个数字字符,将0000001000添加在数据之前:000000100000000011000101011001100001100000010000001最后由表二给出数字编码的标志:0001编码完成编码:1-H版本中的“AC-42”1.从字符索引表中找到 AC-42 这五个字条的索引(10,
3、12,41,4,2)2.两两分组:(10,12)(41,4)(2)3.把每一组转成11bits的二进制:(10,12)(45进制)进制)-10 x45+12=462(10进制)进制)-00111001110(2进制)进制)(41,4)-41x45+4=1849-11100111001(2)-转成转成 000010(6位,最大位,最大44二进制位为二进制位为6位)位)4.把这些二进制连接起来:00111001110 11100111001 0000105.把字符的个数转成二进制(1-H版本9 bits):5个字符,5转成 0000001016.在头上加上编码标识 0010 和第5步的个数编码:0
4、0100000001010011100111011100111001000010假如我们有个“HELLO WORLD”的字符串要编码,根据上面的示例二,我们可以得到下面的编码加上结束符:0000然后8bits重排:如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有78个bits,所以,我们还要加上2个0,然后按8个bits分好组:00100000 01011011 00001011 01111000 1101000101110010 11011100 01001101 01000011 0100000000最后,如果如果还没有达到我们最大的bits数的限制(表七),我们
5、还要加一些补齐码(Padding Bytes),补齐码就是重复下面的两个bytes:11101100和 00010001。假设我们需要编码的是版本 1的Q纠错级,那么,其最大需要104个bits,而我们上面只有80个bits,所以,还需要补24个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:00100000 01011011 00001011 01111000 1101000101110010 11011100 01001101 01000011 01000000001110110011101100 0001000100010001 111011001
6、1101100重复下面的两个bytes:11101100和 00010001二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。具体步骤:首先,我们需要对数据码进行分组,也就是分成不同的组(Block),然后对各个组进行纠错编码。对于如何分组,参见QR码编码规范(QR Code Specification)中的表13-表22.需要分多少块,每一块有多少个码字(8bits)举一个5-Q版本的例子:块数为2+2=4块,头一组(c,k,r)=(33,15,9),的两个Blocks中各15个bits数据+2*9个bits的纠错码。第二组同理,16+
7、2*9=34bits下面是一个5-Q版本的示例:二进制写起来太庞大,所以这里用十进制写。纠错码主要通过里德-所罗门纠错算法算出来,太难,不做介绍。首先穿插放置:把数据码和纠错码的各个码字穿插放置。规则如下:对于数据码:把每个块的第一个码字先拿出来按顺度排列好然后再取第二列的:67,246,182,70,85,246,230,247如此类推:67,246,182,70,85,246,230,247 ,38,6,50,17,7,236先取第一列的:67,246,182,70纠错码也是一样和数据码取的一样,得到:213,87,148,235,199,204,116,159,39,133,141,23
8、6然后,再把这两组放在一起(纠错码放在数据码之后)得到: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,。120,192,178,39,133,141,236最后根据表一,将剩余字(Remainder Bits)补齐。5-Q版本还需要补7bits,7*8=56个0.第一步:位置探测图形第二步:矫正图形和校准线第三步:格式信息和版本信息第四步:画数据第五步:掩膜首先,先把位置探测图形(Position Detection)图案画在三个角上。(无论是什么版本,这个
9、图案的尺寸就是这么大)然后,再把矫正(Alignment)图案画上(无论什么版本,这个图案的尺寸就是这么大)接下来是校准的线(Timing Pattern)完成前三部得到的图形。完成前三部得到的图形。接下来是格式信息(Formation Information)5个数据位:其中,2个bits用于表示使用什么样的纠错等级,3个bits表示使用什么样的掩膜。10个纠错位。主要通过附录C来计算。然后,将15位格式信息与掩模图形101010000010010进行XOR运算,以确保纠错等级和掩模图形合在一起的结果不全是0。格式信息出现了两次冗余,因为这对正确译码非常关键。例:设定纠错等级为M:00掩模图
10、形参考:101数据:00101BCH位:0011011100掩模前的位序列:001010011011100用于XOR操作的掩模图形:101010000010010格式信息模块图形:100000011001110再接下来是版本信息(Version Information)(版本7以后需要这个编码)版本信息一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码(根据附录计算)例如:版本号:7 数据:000111BCH位:110010010100格式信息模块图形:000111110010010100然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各
11、个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会造成扫描识别的困难。所以,我们还要做掩膜操作QR有8个掩膜可以使用,如下所示。所谓掩膜,就是和上面生成的图做异或(XOR)操作。掩膜只会和数据区进行异或,不会影响功能区。原始图形分别与8种掩膜做异或,然后评分,选出最好的一种。在依次用每一个掩模图形进行掩模操作之后,要通过对每一次如下情况的出现进行罚点记分,以便对每一个结果进行评估,分数越高,其结果越不可用。(大概意思就是相邻的小方块的颜色相同得越少越好。)最后便得到最终的QR二维码汇报结束汇报结束 谢谢观看谢谢观看!欢迎提出您的宝贵意见!欢迎提出您的宝贵意见!