欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

跟我一起学习玩转二维码

来源:本站整理 作者:佚名 时间:2019-05-31 TAG: 我要投稿

有些时候二维码被严重破坏导致无法扫描,促使我去学习了一波关于二维码的知识。二维码一共有40个尺寸。V 1是21 x 21的矩阵,V2是 25 x 25的矩阵,V3是29的尺寸,每增加一个等级,就会增加4的尺寸,公式是:(V-1)*4 + 21 最高V 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。
二维码格式示例如下:

定位图案
定位图案,就是每个二维码都有的左上、左下和右上三个角的“回”字形的标志。用于标记二维码的矩形大小他的尺寸都是7*7的模块。

功能性数据:存在于所有的尺寸中,用于存放一些格式化数据的,主要内容为“纠错码等级(3bit)+掩码类别(2bit)+BCH code(10bit,用于纠错)”,然后这15个bits还要与101010000010010做XOR操作,主要是为了如果选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加扫描器的图像识别的困难。比如:

  而这15个bit在format information区域内的分布如下:

  在 Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
 数据码和纠错码
 除了上述的那些地方,剩下的地方存放 数据码 和纠错码。就是最前面两张图的深灰色区域,一般数据都是从右下角开始填充,先填充数据码,数据码填充完毕之后再填充纠错码,以v1为例,数据的填充顺序,是这样的:

数据编码
QR码支持如下的编码:
数字编码:从0到9;
字符编码:包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格;
字节编码:可以是0-255的ISO-8859-1字符;
日文编码:也是双字节编码;
Extended ChannelInterpretation (ECI) mode 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码;
Structured Appendmode 用于混合编码,也就是说,这个二维码中包含了多种编码格式;
FNC1 mode 这种编码方式主要是给一些特殊的工业或行业用的。比如GS1条形码之类的
下表是每个模式的编码相对应的“编号”,这个编号,存在于format information区域。

因为种类较多较复杂,而且为了方便大家理解,我们在这里值选择数字编码和字符编码举例,其它的编码,有兴趣的同学可以查看官方文档。示例一:
数字编码,从0到9。如果需要编码的数字的个数不是3的倍数,那么,最后剩下的1或2位数会被转成4或7bits,则其它的每3位数字会被编成10位的二进制数,最后将这些二进制数据连接起来并在前面加上编码模式的编号和字符计数指示符(就是表示了被编码的信息有多少个字符),字符计数指示符的长度取决于编码的模式和所要编成二维码的版本,在数字编码中,字符计数指示符如下表对应的有10、12或14位:

比如在Version 1的尺寸下,纠错级别为H(纠错级别我们会在下面讲到)的情况下,我们要编码: 01234567
(1)把上述数字分成三组: 012 345 67
(2)把他们转成10bit二进制:  012 转成 0000001100;345 转成 0101011001;67 转成1000011。
(3)把这三个二进制串起来: 0000001100 0101011001 1000011
(4)把数字的个数转成二进制 (version 1-H是10 bits ): 8个数字的二进制是0000001000
(5)把数字编码的标志0001和第4步的编码加到前面:  0001 00000010000000001100 0101011001 1000011
示例二:
字符编码(也叫字母数字编码)。包括 0-9,大写的A到Z(没有小写),以及符号$ % *+ – . / : 包括空格。这些字符会映射成一个字符索引表。如下所示(两个表,中英文对照):(其中的SP是空格,Char是字符,Value是其索引值),编码的过程是把字符两两分组,然后转成下表的45进制,然后转成11bits的二进制,如果最后有一个落单的,那就转成6bits的二进制。而字符计数指示符需要根据不同的Version尺寸编成9, 11或13个二进制(如上表)。


在V 1的尺寸下,纠错级别为H的情况下,编码: AC-42
(1)从字符索引表中找到 AC-42 这五个字条的索引 (10,12,41,4,2)
(2)两两分组: (10,12) (41,4) (2)
(3)把每一组转成11bits的二进制:(10,12) 10*45+12 = 462 转成 00111001110;(41,4)41*45+4 = 1849 转成 11100111001;
(4)把这些二进制连接起来:00111001110 11100111001 000010

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载