文档章节

二维码原理之QR码编码原理二(编码)

Clearboyz
 Clearboyz
发布于 2017/01/18 10:39
字数 1326
阅读 13
收藏 0

编码就是把常见的数字、字符等转换成QR码的方法。说具体的编码之前,先说一下QR码的最大容量问题。

一、最大容量

QR码的最大容量取决于选择的版本、纠错级别和编码模式(Mode:数字、字符、多字节字符等)。以版本1、纠错级别为Level Q的QR码为例,可以存储27个纯数字,或17个字母数字混合字符或11个8bit字节数据。如果要存储同样多的内容同时提高纠错级别,则需要采用更高的版本。版本1~9 数据容量、纠错码容量对照如下表:

(version) (error correcting level) (count of data code words) count of EC code words (numeric) (alphanumeric) 8bit
1 L 19 7 41 25 17
1 M 16 10 34 20 14
1 Q 13 13 27 16 11
1 H 9 17 17 10 7
2 L 34 10 77 47 32
2 M 28 16 63 38 26
2 Q 22 22 48 29 20
2 H 16 28 34 20 14
3 L 55 15 127 77 53
3 M 44 26 101 61 42
3 Q 34 36 77 47 32
3 H 26 44 58 35 24
4 L 80 20 187 114 78
4 M 64 36 149 90 62
4 Q 48 52 111 67 46
4 H 36 64 82 50 34
5 L 108 26 255 154 106
5 M 86 48 202 122 84
5 Q 62 72 144 87 60
5 H 46 88 106 64 44
6 L 136 36 322 195 134
6 M 108 64 255 154 106
6 Q 76 96 175 108 74
6 H 60 112 139 84 58
7 L 156 40 370 224 154
7 M 124 72 293 178 122
7 Q 88 108 207 125 86
7 H 66 130 154 93 64
8 L 194 48 461 279 192
8 M 154 88 365 221 152
8 Q 110 132 259 157 108
8 H 86 156 202 122 84
9 L 232 60 552 335 230
9 M 182 110 432 262 180
9 Q 132 160 312 189 130
9 H 100 192 235 143 98

如果要了解更详细的QR码容量信息,可以到电装的网站去看看http://www.denso-wave.com/qrcode/vertable1-e.html

二、模式标识符(Mode Indicator)

QR码的模式(Mode)就是前文提到的数字、字符、8bit 字节码、多字节码等。对于不同的模式,都有对应的模式标识符(Mode Indicator)来帮助解码程序进行匹配,模式标识符是4bit的二进制数:

1、数字模式(numeric mode ): 0001
2、混合字符模式(alphanumeric mode) : 0010
3、8bit byte mode: 0100
4、日本汉字(KANJI mode) : 1000

5、中国汉字(GB2312):1101

由于示例文本串是混合字符,因此将选择alphanumeric mode,其标识码为:0010

三、文本串计数标识符(Character count indicator)

文本串计数标识符用来存储源内容字符串的长度,在版本1-9的QR码中,文本串长度标识符自身的长度被定义为:
数字 : 10bit 
混合字符 : 9bit
8bit 字节码 : 8bit
多字节码 : 8bit

在本例中,源文本串的长度为8个字符,混合字符的长度为9bit,因此将字符个数8编码为9位二进制表示:000001000

加上混合字符模式标识码,总的编码为0010 000001000

四、数据内容编码

 1、数字模式下的编码

在数字模式下,数据被限制为3个数字一段,分成若干段。如:"123456" 将分成"123" 和 "456",分别被编码成10bit的二进制数。“123”的10bit二进制表示法为:0001111011,实际上就是二进制的123。

当数据的长度不足3个数字时,如果只有1个数字则用4bit,如果有2个数字就用7个bit来表示。
如:"9876"被分成"987"和"6"两段,因此被表示为"1111011011 0110"。

2、混合字符模式下的编码

混合字符模式编码,其字符对照表如下:

 0     A   10     K   20     U   30     +   40 
1 1   B 11   L 21   V 31   - 41
2 2   C 12   M 22   W 32   . 42
3 3   D 13   N 23   X 33   / 43
4 4   E 14   O 24   Y 34   : 44
5 5   F 15   P 25   Z 35
6 6   G 16   Q 26   [sp] 36
7 7   H 17   R 27   $ 37
8 8   I 18   S 28   % 38
9 9   J 19   T 29   * 3

 

编码方式为:

源码被分成两个字符一段,如下所示,每段的第一个字符乘上45,再用第二个数字相加。因此每段变成了11bit的2进制码,如果字符个数只有1个,则用6bit表示。

示例: 

    "AB" "CD" "E1" "23"
    45*10+11 45*12+13 45*14+1 45*2+3
    461 553 631 93
0010 000001000 00111001101 01000101001 01001110111

00001011101

3、8bit字节数据不经编码转换直接保存。

 

五、编码终止符(Terminator)

如果编码后的字符长度不足当前版本和纠错级别所存储的容量,则在后续补"0000",如果容量已满则无需添加终止符。此时得到的编码串为:

0010 000001000 00111001101 01000101001 01001110111 00001011101 0000
六、编成8bit码字(Code words)

将以上的编码再按8bit一组,形成码字(code words):

 00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000
如果尾部数据不足8bit,则在尾部充0:

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000
如果编码后的数据不足版本及纠错级别的最大容量,则在尾部补充 "11101100" 和 "00010001",直到全部填满。最后,版本1、Level H下的"ABCDE123" 的QR码是:

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000 11101100

十进制表示法为:

32 65 205 69 41 220 46 128 236

 

本文转载自:http://blog.csdn.net/dekko/article/details/6122239

共有 人打赏支持
Clearboyz
粉丝 1
博文 22
码字总数 2322
作品 0
海淀
程序员
Java js 生成二维码 解析二维码

1.二维码分类   二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型。 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行。 图示: 2. 矩阵...

haoyuehong
06/28
0
0
[开源]C#二维码生成解析工具,可添加自定义Logo

  二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,...

雲霏霏
2015/03/04
0
0
阐述二维码的原理以及使用google api和PHP QR Code来生成二维码

一、什么是二维码: 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上) 分布的黑白相间的图形记录数据符号信息的。 在许多种类的二维条码中,常用的...

mckee
2013/10/16
0
0
二维码实现原理

二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中...

雨中人X
2016/03/21
93
0
开题报告问题

文字识别 图像预处理 单字切割 文字特征抽取 对比数据库 1,图像预处理 手机屏幕的每一个像素都是由计算机中24位数表示的,每个像素都包含红(R) 绿(G)蓝(B)三种色彩分量,可表示为RGB C X, ...

761218914
2016/01/18
1
0

没有更多内容

加载失败,请刷新页面

加载更多

利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
29分钟前
0
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
51分钟前
1
0
给MySQL授权远程访问

putty登录服务器; 登录MySQL: mysql -u root -p 新建远程用户: CREATE USER 'myusername' IDENTIFIED BY 'mypassword'; 授权: grant all on *.* to john@'101.102.103.104' identified by......

sweethome
今天
1
0
在t-io老巢造谣,不过有造谣的就会有反造谣的!

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
100
0
heartbeat 资源

drbd+apache+heartbeat : http://blog.51cto.com/11838039/1827901 heartbeat双机热备的架设 : http://blog.51cto.com/11838039/1827560 对heaetbeat的深一步认识 : http://blog.51cto.co......

寰宇01
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部