二维码的生成细节和原理 | 酷壳 - CoolShell.cn http://coolshell.cn/articles/10590.html
二维码又称QRCode,QR全称QuickResponse,是一个近几年来移动设备上超流行的一种编码方式,它比传统的BarCode条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章,揭露一下。供好学的人一同学习之。
关于QRCode Specification,可参看这个PDF:http://raidenii.net/files/datasheets/misc/qr_code.pdf
基础知识
首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version1是21 x 21的矩阵,Version2是 25 x25的矩阵,Version3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4+ 21(V是版本号)最高Version40,(40-1)*4+21= 177,所以最高是177x 177的正方形。
下面我们看看一个二维码的样例:
定位图案
· Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。
· Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。
· Alignment Patterns只有Version2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。
功能性数据
· Format Information存在于所有的尺寸中,用于存放一些格式化数据的。
· Version Information在>= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
数据码和纠错码
· 除了上述的那些地方,剩下的地方存放 Data Code数据码和 Error Correction Code纠错码。