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

二维码的生成细节和原理

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

    Remainder Bits
 
    最后再加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:上述的5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看QR Code Spec的第15页的Table-1的定义表。
 
    画二维码图
 
    Position Detection Pattern
 
    首先,先把Position Detection图案画在三个角上。
 
二维码的生成细节和原理
 
    Alignment Pattern
 
    然后,再把Alignment图案画上
 
二维码的生成细节和原理
 
    关于Alignment的位置,可以查看QR Code Spec的第81页的Table-E.1的定义表(下表是不完全表格)
 
二维码的生成细节和原理
 
    下图是根据上述表格中的Version8的一个例子(6,24,42)
 
二维码的生成细节和原理
 
    Timing Pattern
 
    接下来是Timing Pattern的线(这个不用多说了)
 
二维码的生成细节和原理
 
    Format Information
 
    再接下来是Formation Information,下图中的蓝色部分。
 
二维码的生成细节和原理
 
    Format Information是一个15个bits的信息,每一个bit的位置如下图所示:(注意图中的Dark Module,那是永远出现的)
 
二维码的生成细节和原理
 
    这15个bits中包括:
 
  • 5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask

  • 10个纠错bits。主要通过BCH Code来计算
 
    然后15个bits还要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别,以及000的Mask,从重造成全部为白色,这会增加我们的扫描器的图像识别的困难。
 
    下面是一个示例:
 
二维码的生成细节和原理
 
    关于Error Correction Level如下表所示:
 
    关于Mask图案如后面的Table 23所示。
 
    Version Information
 
    再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。
 
二维码的生成细节和原理
 
    Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码,下面是一个示例:
 
二维码的生成细节和原理
 
    而其填充位置如下:
 
二维码的生成细节和原理
 
    数据和数据纠错码
 
    然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。
 
二维码的生成细节和原理
 
    掩码图案
 
    这样下来,我们的图就填好了,但是,也许那些点并不均衡,所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个 Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进 行XOR,不会影响功能区。
 
二维码的生成细节和原理
 
    其Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y)
 
二维码的生成细节和原理
 
    下面是Mask后的一些样子,我们可以看到被某些Mask XOR了的数据变得比较零散了。
 
二维码的生成细节和原理
 
    Mask过后的二维码就成最终的图了。
 
    好了,大家可以去尝试去写一下QR的编码程序,当然,你可以用网上找个Reed Soloman的纠错算法的库,或是看看别人的源代码是怎么实现这个繁锁的编码。
 
责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐