e-works数字化企业网  »  文章频道  »  基础信息化  »  移动应用

二维码的生成细节和原理

2017/8/11    来源:酷壳网    作者:陈皓      
关键字:二维码  二维码原理  
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

    结束符和补齐符
 
    假如我们有个HELLO WORLD的字符串要编码,根据上面的示例二,我们可以得到下面的编码,
 
二维码的生成细节和原理
 
    我们还要加上结束符:
 
二维码的生成细节和原理
 
    按8bits重排
 
    如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有78个bits,所以,我们还要加上2个0,然后按8个bits分好组:
 
二维码的生成细节和原理
 
    补齐码(Padding Bytes)
 
    最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001 (这两个二进制转成十进制是236和17,我也不知道为什么,只知道Spec上是这么写的)关于每一个Version的每一种纠错级别的最大Bits限 制,可以参看QR Code Spec的第28页到32页的Table-7一表。
 
    假设我们需要编码的是Version 1的Q纠错级,那么,其最大需要104个bits,而我们上面只有80个bits,所以,还需要24个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:
 
二维码的生成细节和原理
 
    纠错码
 
    上面我们说到了一些纠错级别,Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。
 
二维码的生成细节和原理
 
    那么,QR是怎么对数据码加上纠错码的?首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第33页到44页的Table-13到Table-22的定义表。注意最后两列:
 
  • Number of Error Code Correction Blocks :需要分多少个块。

  • Error Correction Code Per Blocks:每一个块中的code个数,所谓的code的个数,也就是有多少个8bits的字节。
 
二维码的生成细节和原理
 
    举个例子:上述的Version 5 + Q纠错级:需要4个Blocks(2个Blocks为一组,共两组),头一组的两个Blocks中各15个bits数据 + 各 9个bits的纠错码(注:表中的codewords就是一个8bits的byte)(再注:最后一例中的(c, k, r )的公式为:c = k + 2 * r,因为后脚注解释了:纠错码的容量小于纠错码的一半)
 
    下图给一个5-Q的示例(因为二进制写起来会让表格太大,所以,我都用了十进制)
 
二维码的生成细节和原理
 
    注:二维码的纠错码主要是通过Reed-Solomon error correction(里 德-所罗门纠错算法)来实现的。对于这个算法,对于我来说是相当的复杂,里面有很多的数学计算,比如:多项式除法,把1-255的数映射成2的n次方 (0<=n<=255)的伽罗瓦域Galois Field之类的神一样的东西,以及基于这些基础的纠错数学公式,因为我的数据基础差,对于我来说太过复杂,所以我一时半会儿还有点没搞明白,还在学习 中,所以,我在这里就不展开说这些东西了。还请大家见谅了。(当然,如果有朋友很明白,也繁请教教我)
 
    最终编码
 
    穿插放置
 
    如果你以为我们可以开始画图,你就错了。二维码的混乱技术还没有玩完,它还要把数据码和纠错码的各个codewords交替放在一起。如何交替呢,规则如下:
 
二维码的生成细节和原理
 
    对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。如:上述示例中的Data Codewords如下:
 
    我们先取第一列的:67, 246, 182, 70
 
    然后再取第二列的:67, 246, 182, 70, 85,246,230 ,247
 
    如此类推:67, 246, 182, 70, 85,246,230 ,247 ………  ……… ,38,6,50,17,7,236
 
    对于纠错码,也是一样:
 
二维码的生成细节和原理
 
    和数据码取的一样,得到:213,87,148,235,199,204,116,159,…… …… 39,133,141,236
 
    然后,再把这两组放在一起(纠错码放在数据码之后)得到:
 
二维码的生成细节和原理
 

责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐