二维码转换,在线二维码生成器( 二 )


编码模式我们都知道计算机只认二进制信息 , 所以我们需要把字符串中的数字、字母、汉字以及各种字符统一转换成由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种掩码方案:我们需要选择一个掩码图与我们生成的二维码再做一次异或操作 , 这样黑白色块分布就会更加的均匀 。

推荐阅读