二维码的组成和原理
二维码是由条形码改造而来。在商品包装上最常见,由黑白相间粗细不同的的竖条纹组成,商品的信息就藏在这个条形码中。
收银员通过扫描条形码就可获得商品信息,从而实现快速结账。条形码是在一个维度上携带信息的条码,二维码顾名思义就是在水平,垂直两个维度上都携带了信息,因此从条形变成了方块状。无论是条形码还是二维码,本质上都是个信息入口。
一个完整的二维码是由若干个黑色小方块和白色小方块组成的,首先是将数字、字母、符号等字符经过一定的运算编码规则转换成二进制的“0”和“1”,再经过一系列优化算法就得到了二维码。二维码上的白色小方块表示二进制的“0”,黑色小方块表示“1”。
二维码进行读取时,通过颜色反差读取到二维码上的 01 顺序,之后通过数字,字节,特殊字符,混合编码,汉字编码等来将二进制进行转为我们可以认识的字符。
二维码的生成遵循二进制编码,它们的排列方式就是信息的体现。它的基本功能区划分为:
位置探测图形、位置探测图形分隔符、定位图形:二维码的三个角落都分布着一个较大的回形黑白方块--位置探测图形,它和位置探测图形分隔符、定位图形一起帮助二维码在形成的过程中进行定位,减少错误排列的出现。不管你的手机是横着扫、竖着扫,还是斜着扫,它都知道二维码应该从哪个方向开始读。对每个 QR 码来说,它们的位置都是固定存在的,只是大小规格会有所差异。
格式信息:表示该二维码的纠错级别,级别越高,纠错能力越强。例如,需要编码的码字数据有 100 个,并且想对其中的一半,即对 50 个码字进行纠错,则计算方法如下。纠错需要相当于码字 2 倍的符号(RS 编码※),因此在这种情况下的数量为 50 个 ×2=100 码字。因此,全部码字数量为 200 个,其中用作纠错的码字为 50 个,所以计算得出,相对于全部码字的纠错率就是 25%。这一比率相当于 QR 码纠错级别中的“Q”级别。
Level L:最多 7% 的字码可被修正。
Level M:最多 15% 的字码可被修正。
Level Q:最多 25% 的字码可被修正。
Level H:最多 30% 的字码可被修正。
校正图形:在图像有一定程度损坏的情况下,译码软件可以通过它同步图像模块的坐标映像。不同规格的二维码校正图形的数量和位置是不一样。规格确定,它的数量和位置也就确定了。
数据和纠错码字:实际保存的二维码信息和纠错码字。这是二维码的一种容错机制,举个例子假设一个二维码有 30% 以下的面积被遮盖或者去除时,二维码扫描器依然能够从这个残缺的二维码中准确获取信息。
版本信息:即二维码的规格,QR 码符号共有 40 种规格的矩阵,从 21x21(版本 1),到 177x177(版本 40),每一版本比前一版本在纵向和横向各自增加 4 个模块。二维码的各个版本结合数据量、字符类型和纠错级别,均有对应的最多输入字符数,需根据实际需求选定。如果增加数据量,就需要更多的码元,二维码就会越大。
当扫描设置开始扫描二维码时,根据位置探测图形、位置探测图形分隔符、定位图形迅速提取待识别区域。有时候我们用手机或者其他设备扫描二维码时并不是正对着二维码,或者,即使是正对着二维码,也会在一定程度上造成二维码倾斜,拉伸等等变形。但是我们发现这并不能影响二维码的识别,那么设计成一些固定比例的长方形块的校正图形就可以帮助设备对被扫描图片进行正确的矫正。
总结下,我们二维码的的识别过程大致如下:打开手机或其他设备扫一扫对准二维码,扫描失败,告知返回上一步,重新开始。显示扫描框,方便用户对准二维码。