上个世界 60 年代至 70 年代,条形码联合发明人诺曼・约瑟夫・伍德兰德(Norman Joseph Woodland)发明了一维码(条形码)。
缺点:容量少,只能包含字母和数字、条形码尺寸相对较大(空间利用率较低)、条形码遭到损坏后便不能阅读的缺点。
二维码就出现了,
1994 年,日本电装公司正式宣布公开首个 QR Code,而 QR 的全称就是“Quick Response”,翻译过来就是快速响应。公开免费使用专利,但是真正大规模使用还是在我国。
二维码靠着移动支付才真正的发展壮大。
三种移动支付方式:
移动支付方式 | 优点 | 推广 |
---|---|---|
NFC | 方便,无网络也可支付 | 2.4GHz标准与13.56MHz标准长期处于互相不兼容的竞争状态, 造成NFC模式始终没有形成大范围的推广态势,错过推广机会 |
声波支付 | 想不出 | 成本大 |
二维码 | 高密度编码,信息容量大 编码范围广:可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码; 可以表示多种语言文字;可表示图像数据。 容错能力强,具有纠错功能 可引入加密措施:保密性、防伪性好。 |
微信、银联和支付宝三巨头之间的竞争加剧推广 缺点:维码技术成为手机病毒、钓鱼网站传播的新渠道 |
所以用啥懂了吧。
二维码 | 原理 | 代表 |
---|---|---|
线性堆叠式二维码(行排式二维条码) | 建立在一维条码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识读设备与条码印刷与一维条码技术兼容 | Code 16K、Code 49、PDF417、MicroPDF417 等 |
矩阵式二维码 | 它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识读处理码制。 | Code One、MaxiCode、QR Code、 Data Matrix、Han Xin Code、Grid Matrix |
邮政码 | 邮政专用 |
版本 | 行列 |
---|---|
2 | 6,18 |
3 | 6, 22 |
4 | 6, 26 |
5 | 6, 30 |
6 | 6, 34 |
7 | 6, 22,38 |
8 | 6, 24,42 |
9 | 6 ,26, 46 |
10 | 6 ,28, 50 |
11 | 6 ,30, 54 |
12 | 6 ,32, 58 |
13 | 6, 34,62 |
14 | 6, 26,46,66 |
15 | 6, 26,48,70 |
16 | 6, 26,50,74 |
17 | 6, 30,54, 78 |
18 | 6, 30,56,82 |
19 | 6, 30,58, 86 |
20 | 6, 34,62, 90 |
21 | 6, 28,50, 72,94 |
22 | 6, 26,50,74 ,98 |
23 | 6,30,54,78,102 |
24 | 6, 28,54,80,106 |
25 | 6, 32,58,84,110 |
26 | 6, 30,58, 86,114 |
27 | 6, 34,62, 90,118 |
28 | 6, 26,50, 74,98,122 |
29 | 6, 30,54, 78,102,126 |
30 | 6, 26,52, 78,104,130 |
31 | 6, 30,56, 82,108,134 |
32 | 6, 34,60, 86,112,138 |
33 | 6, 30,58, 86,114,142 |
34 | 6, 34,62, 90,118,146 |
35 | 6, 30,54, 78,102,126,150 |
36 | 6, 24,50, 76,102,128,154 |
37 | 6, 28,54, 80,106,132,158 |
38 | 6, 32,58, 84,110,136,162 |
39 | 6, 26,54, 82,110,138,166 |
40 | 6, 30,58, 86,114,142,170 |
-Dark Module 暗模块其位置始终位于坐标 ([(4 * V) + 9], 8)
模式 | 说明 |
---|---|
Number | 数字模式用于十进制数字 0 到 9。 |
Alpanumeric | 字母数字模式 |
byte | 字节模式适用于 ISO-8859-1 字符集中的字符。但是,某些 QR 码扫描器可以自动检测是否在字节模式下使用 UTF-8。 |
Kanji | 日本汉字模式用于 Shift JIS 字符集中的双字节字符。经过一系列可以转换中文 |
混合模式 | 暂时不研究 |
模式 | 举例 | 说明 |
---|---|---|
number | 01234567 | 3个为一组 (012),(345),( 67) 3个数字转成10位二进制,如果最后是二个数字则 7 个二进制位,如果最后一位是1个数字则是4位 如012 转成 0000001100 345(0101011001) 67 转成 1000011 |
字母数字模式 | LOVE YOU | 只能对大写字母进行编码,两两为一组(L,O) (V,E) (空格, Y) (O,U), 查下表SP是空格 (L ,O)->(21,24) 然后第一个数字x45 +第二个数字 21*45+24 = 969 转换为11为二进制不够左边补0, 969: ( 0 1111 0010 01) 奇数个字符,取最后一个字符的数字表示并将其转换为 6 位二进制字符串 |
字节模式 | Hello, world! | 将您输入字符串转换为 ISO 8859-1 或 UTF-8(查iso 88859-1的表或者是utf-8转成8为二进制 ħ→0x48→01001000 Ë→0x65→01100101 |
Kanji | 荷 | 日文编码,也是双字节编码,同样,也可以用于中文编码。可以从 Shift JIS Kanji Code Table 查出改字16进制, 如果在0x8140 到 0x9FFC 的范围内减去 0x8140 如荷0x89D7 - 0x8140 = 0x0897 结果是 0x0897。 将该数字拆分为其最高有效字节和最低有效字节:0x0897 的最高有效字节为 0x08 0x0897 的最低有效字节为 0x97 接下来,将最高有效字节乘以 0xC0,然后将最低有效字节添加到结果中: (0x08 * 0xC0) + 0x97 = (0x600) + 0x97 = 0x697最后,将该结果转换为 13 位二进制:0x697 = 0 0110 1001 0111 0xE040 到 0xEBBF 的范围内 减去 0xC140其他与上述一样 |
混合模式 | 暂不讨论 |
编码 | 字符个数 | HELLO WORLD | 结束符 |
---|---|---|---|
0010 | 000001011 | 01100001011 01111000110 10001011100 10110111000 10011010100 001101 | 0000 |
结束符是加起来不够8的倍数补0 最多4个0
HELLO WORLD 字符串中添加终止符后,长度变为 78 位长。这不是 8 的倍数。添加两个 0 使其成为 8 位二进制字节
5. 第5步:
如果字符串仍然不够长,无法填满最大容量,则在字符串末尾添加以下字节,重复直到字符串达到最大长度:
11101100 00010001
最大容量:查看纠错表的最大容量
如 1-Q版本最大容量 13字节 13*8 =104
而上面才80位 加104-80=24, 24/8 =3 个字节补齐码
加完之后就是数据码了
纠正码:
查看这个表
会把数据码每8个位(bit)1码块分成1-2组
Number of Blocks in Group 1 组1:
Number of Data Codewords in Each of Group 1’s Blocks : 组1放的数据块的个数
Number of Blocks in Group 2:组2
Number of Data Codewords in Each of Group 1’s Blocks 组2数据块个数
EC Codewords Per Block 一个数据块要的多少个纠错码字。
纠错码通过Reed-Solomon error correction(里德-所罗门纠错算法)生成详细可以参考这个东西有点复杂。气抖冷
得到纠错码后
第6步,数据码从两组数据块中交错取出数据块排列,纠错码也一样,然后数据码放在纠错码前面
数据码与纠正码合起来就是数据区了
最后得到的非功能图形与mask(掩模)进行xor运算也就是异或运算(相同的为0,不同为1)
选择不同mask图像 运算后跟据罚点计分选择最低分者
计分规则
黄色数据区
from MyQR import myqr
myqr.run(words="https://www.bilibili.com/",# 可以是文字但中文不支持,也可以一个链接
version=5,#版本1-40
save_name="33.gif",#保存二维码的名字
colorized=True,#有颜色的二维码,false就是黑白二维码
picture="u.gif",#你用做生成二维码的背景图片 可以是gif 也可以是png jpep等格式
save_dir="pic/")#保存的地方
特别参考https://www.thonky.com/qr-code-tutorial/