纠错级别二维码一般有一定的容错率,所以即使二维码被遮挡住一部分,仍然可以被扫描出来,原理就是在生成二维码的过程中对数据做了冗余处理,冗余程度越高容错率就越高(纠错级别越高),二维码能被遮挡的部分自然也就越多 。二维码的纠错级别从低到高分为L(7%)、M(15%)、Q(25%)、H(30%)4个等级,如果需要在二维码中间加logo,那么我们就应该生成H级别的二维码,但也并不是纠错级别越高越好,级别越高需要冗余的数据就越多,那么生成的二维码的复杂程度也就越高,实际使用过程中我们应该根据需求选择合适的纠错级别 。
编码模式我们都知道计算机只认二进制信息,所以我们需要把字符串中的数字、字母、汉字以及各种字符统一转换成由0和1组成的二进制数字串计算机才能识别,所以生成二维码的过程就是将字符串转换成二进制数字串的过程 。最后生成的二进制数字串对应到二维码上,0对应白色的小方块、1对应黑色小方块,按照8个一组依次填充到数据区就是一个完整的可以被识别的二维码了 。
根据源字符串类型,二维码主要支持4种标准化的编码模式,分别为数字编码、字符编码、字节编码以及日文编码,当然也支持其他一些特殊的字符集编码以及混合编码 。每种编码模式对应一个4位的二进制的编码模式指示符:下面以字符编码举个例子,现在有字符串“HELLO WORLD”1、模式指示符——根据查表可知HELLO WORLD需要使用字符编码模式,所以它的模式指示符为0010 。
2、字符计数指示符——表示源字符串的长度,字符计数指示符必须放在模式指示符之后 。字符计数指示符的计算依赖于二维码的版本以及编码模式:以版本1为例,字符编码需要9bits,HELLO WORLD长度为11,转为二进制为1011,不足9位,左边补5个0得到最终结果000001011,加上模式指示符目前我们得到的二进制数字串为0010 000001011 。
3、对原字符串编码,将HELLO WORLD两两分组得到(H,E)、 (L,L)、(O, )、(W,O)、(R,L)、(D);根据索引表找到每个字符对应的值,得到(17,14)、 (21,21)、(24,36)、(32,24)、(27,21)、(13);将每组数字先转成45进制、再将结果转成长度11的二进制串,长度不足的补0 。
例如(17,14) 转成45进制为17*45 14=779,再将779转成二进制 1100001011,左边补1个0得到01100001011,如果最后一组是单独一个,则转成6位的二进制串,所以字符串HELLO WORLD经过字符编码之后,再加上前面计算好的模式指示符和字符计数指示符之后最终得到0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 。
4、 在确定二维码的版本和纠错级别以后,字符串的编码结果应该是一个固定长度的二进制串,如果我们计算的结果长度不够就需要进行不起操作 。例如确定二维码的版本1和纠错级别Q,则最终二进制串的长度需要达到104位 。在第3步中我们得到的最二进制串的长度为74,所以需要进行补齐操作 。首先末尾可以至多追加4个0,接着末尾补齐更多的0直到长度是8的倍数,如追加4个0后长度达到78,要达到8的倍数则还需要补2个0;如果这时候长度还没有达到目标,那就在末尾循环追加固定的二进制码11101100 00010001直到达到目标长度 。
最后来看一下HELLO WORLD经过字符编码之后结果掩码图源字符串在经过编码之后被转换成二进制的数字串,根据这个二进制数字串画出来的二维码通常会存在黑白色块分布不均的情况,这会导致二维码容易扫描失败 。为了解决这个问题,官方提供了8种掩码方案:我们需要选择一个掩码图与我们生成的二维码再做一次异或操作,这样黑白色块分布就会更加的均匀 。
推荐阅读
- 指纹解锁屏幕官网,华为麦芒5设置指纹解锁密码是多少钱
- s7 解锁不root权限,root密码丢失找回方法
- lg v20韩版怎么root,v20的root密码修改
- 苹果手机破解屏幕锁,苹果5s锁屏密码忘记了怎么办
- 北京联通166号段手机号码选号大厅 联通166号段靓号
- 中国电信在线选号码 电信网上办卡选号
- 下载数码回收网二手手机价格表 数码回收二手手机价格表
- 怎样悄悄解开别人的苹果手机密码,怎样打开别人苹果手机开机密码
- 如何解锁苹果手机密码,怎么取消每次进入苹果都要输入密码
- 苹果手机锁屏密码忘记了咋办,我苹果机密码锁住了忘记密码了怎么办
