QR Code技术学习研究

举报
Jet Ding 发表于 2020/09/28 16:45:37 2020/09/28
【摘要】 QR Code系统是由日本电装浪潮公司的Masahiro Hara于1994年发明的,其目的是在生产过程中跟踪车辆。

1      前言

QR Code(简称快速反应码)是一种矩阵式条码(或二维条码),最早于1994年在日本为汽车行业设计。条形码是一种机器可读的光学标签,它包含了所贴物品的信息。

在实践中,QR Code通常包含指向网站或应用程序的定位器、识别器或跟踪器的数据。

QR Code使用四种标准化编码模式(数字、字母数字、字节/二进制和汉字)来有效地存储数据,也可以使用扩展。

与标准UPC条形码相比,快速响应系统因其快速的可读性和更大的存储容量而在汽车行业以外的领域流行起来。

应用包括产品跟踪、物品识别、时间跟踪、文件管理和一般的营销活动。

QR Code由白色背景上排列的黑色方格组成,可以被相机等成像设备读取,并利用Reed-Solomon误差校正进行处理,直到图像可以被适当解释。然后从图像的水平和垂直分量中都存在的图案中提取所需数据。

2      历史

QR Code系统是由日本电装浪潮公司的Masahiro Hara1994年发明的,其目的是在生产过程中跟踪车辆。

它的设计目的是为了实现高速的部件扫描,现在QR Code的使用范围更广,既包括商业跟踪应用,也包括面向手机用户的便利性应用(称为移动标签)。

QR Code可用于向用户显示文本,将vCard联系人添加到用户的设备上,打开统一资源标识符(URI),连接到无线网络,或撰写电子邮件或文本信息。

有大量的QR Code生成器以软件或在线工具的形式提供,这些工具要么是免费的,要么是需要付费订阅的。 QR Code已经成为最常用的QR Code类型之一。

3      标准

有几个将数据编码为QR Code的标准:

1.         199710-AIM(国际自动识别和移动协会)

2.         19991-JIS X 0510

3.         201521--ISO/IEC 18004:2015

QR Code 2005符号重新命名为QR Code,并增加了对一些程序的澄清和小的修正。

在应用层,大多数的实施方案之间存在一些差异。日本的NTT DoCoMo公司已经为URL、联系信息和其他一些数据类型的编码建立了事实上的标准。

开源的 "ZXing"项目维护了一个QR Code数据类型的列表。

4      用途

我们来看一下QR Code的应用场景:

1.         QR Code在消费广告中已经很常见。

2.         尽管QR Code最初用于跟踪车辆制造中的部件,但它的应用范围要广泛得多。这些应用包括商业跟踪、娱乐和交通票务、产品和忠诚度营销以及店内产品标签。

3.         市场营销的例子包括使用QR Code解码器(是一个移动应用)捕捉公司的折扣和百分比折扣,或存储公司的信息,如地址和相关信息,以及其字母-数字文本数据,可以在黄页目录中看到。

4.         存储地址和URLQR Code可能出现在杂志、标志、公交车、名片或几乎所有用户可能想要了解的物体上。

5.         QR Code已被纳入了货币系统。

6.         信用卡功能正在开发中。

7.         在一些增强现实系统中,QR Code被用于确定物体在三维空间中的位置,QR Code也被用于提供增强现实体验。

8.         QR Code可以在各种移动设备操作系统上使用 

9.         QR Code在建筑领域的应用在印度已经开始,节省了时间、纸张和能源

10.     QR Code允许重定向到URL以实现即时访问 

11.     QR Code已被用来建立 "虚拟商店",将产品信息和QR Code展示给顾客。顾客扫描QR Code,产品就会被送到家里。

12.     QR Code可以用来存储银行账户信息或信用卡信息,也可以专门设计成与特定的支付提供商应用配合使用 

13.     QR Code可以用来登录网站和应用 

14.     通过指定SSID、加密类型、密码/口令以及SSID是否隐藏,移动设备用户可以快速扫描并加入网络,而无需手动输入数据。

15.     QR Code可以链接到讣告,并可以放在墓碑上。

16.     QR Code还可用于扫描TOTP秘密,生成基于时间的一次性密码。

17.     加密QR Code,并不常见,但也有一些应用。例如,日本移民系统在护照上的登陆许可印章上使用加密的QR Code

18.     在现实世界中通过扫描物理地点的二维贴纸进行游戏。 

19.     QR Code已经被各种有忠诚度计划的零售店使用。

20.     品牌企业和政府已经使用序列化QR Code来让消费者、零售商和分销商验证产品的真实性,并帮助检测假冒产品,作为品牌保护计划的一部分。

5      设计原理

与老式的一维条码不同,QR Code是由一束狭窄的光束进行机械扫描,QR Code由一个二维数字图像传感器检测,然后由一个程序处理器进行数字分析。处理器在QR Code图像的四角定位三个独特的方块,在第四个角附近使用一个较小的方块(或多个方块)来规范图像的大小、方向和视角。然后将整个QR Code中的小点转换为二进制数,并通过纠错算法进行验证。

5.1    存储量

可存储在QR Code符号中的数据量取决于数据类型(模式或输入字符集)、版本(1...40,表示符号的总体尺寸,即4×版本号+每边17个点)和纠错级别。最大存储容量发生在版本40和纠错级别L(低)时,用40-L表示:

最大字符存储容量(40-L

字符指的是输入模式/数据类型的各个数值。

输入模式

最大字符数

位数/字符

可能的字符,默认编码

数字

7,089

3⅓

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

字母数字

4,296

0–9, A–Z (大写), 空格, $, %, *, +, -, ., /, :

二进制/字节

2,953

8

ISO 8859-1

汉字/假名

1,817

13

Shift JIS X 0208



下面是一些
QR Code符号示例:

image.png

1版(21×21)。内容: "Ver1"

image.png

2版(25×25)。内容: "Version 2"

image.png

3版(29×29)。内容:"Version 3 QR Code" 

image.png

4版(33×33)。内容: "Version 4 QR Code, up to 50 char"

image.png

10版(57×57)。内容:"Version 10 QR Code, up to 174 char at H Level, with 57x57 modules and plenty of error-correction to go around. Note that there are additional tracking boxes"

image.png

25版(117×117放大到640x640)内容:1,852ASCII字符的QR Code描述。

image.png

40版(177×177 

5.2    纠错

QR Code在有限场景上使用Reed-Solomon纠错技术。

纠错级别越高,存储容量越小。下表列出了四个级别中每个级别的大致纠错能力:

1.         L级(低)可恢复7%的数据字节。

2.         水平M(中)可以恢复15%的数据字节。

3.         Q级(四分位数)可以恢复25%的数据字节。

4.         H级(高)可以恢复30%的数据字节。

在较大的QR符号中,信息被分解成多个Reed-Solomon代码块。代码块大小的选择是为了不试图纠正每个代码块超过15个错误。这限制了解码算法的复杂性。然后,这些码块交错在一起,使得QR符号的局部损坏不太可能超过任何单个码块的容量。

由于纠错技术的存在,可以创造出艺术性的QR Code,这些QR Code仍然可以被正确扫描,但其中包含故意的错误,以使其更具可读性或更有有吸引力,也可以将颜色、标识和其他特征纳入QR Code块中。

image.png

损坏但仍可解码的QR Code

image.png 

带有艺术装饰的QR Code,基于纠错技术仍然可以正确扫描。

5.3    编码

QR Code格式信息记录了两件事:纠错级别和用于符号的掩码模式。

掩码用于打破数据区域中可能会使扫描仪感到困惑的模式,例如大面积的空白区域或看起来像定位标记的误导性特征。

掩码模式定义在一个网格上,必要时重复使用,以覆盖整个符号。

与掩码的暗区相对应的模块是反转的。

格式信息用BCH码保护不出错,每个QR符号中包含两个完整的副本。

消息数据集从右到左以之字形模式放置,如下图所示。在较大的符号中,由于对齐模式的存在和多个交错纠错块的使用,使得这种情况变得复杂。 

image.png

格式信息的含义。上图中,格式信息由(15,5)个BCH码保护,最多可以纠正3位错误。码的总长度为15位,其中5位为数据位(2EC+3个掩码模式),10位为纠错的额外位。这15位的格式掩码是 [101011001010101]

注意,我们将掩码值直接映射到EC级和掩码图案上。

image.png

QR符号内放置信息。信息使用(255,249) Reed-Solomon代码【通过使用 "padding"缩短为(24,18)代码】进行编码,可以纠正最多3个字节的错误。

image.png

较大的符号说明交错块。电文有26个数据字节,使用两个Reed-Solomon码块进行编码。每个代码块是一个(255,233)里德-所罗门代码【缩短为(35,13)代码】,它可以在一个脉冲串中纠正多达11个字节的错误,包含13个数据字节和22个附加到数据字节的 "奇偶校验"字节。两个35字节的Reed-Solomon码块是交错的,因此它可以在一个脉冲串中纠正最多22个字节的错误(结果是总共70个代码字节)。该符号实现了H级纠错

QR编码的一般结构为4位标识的序列,有效载荷长度取决于标识模式(如字节编码有效载荷长度取决于第一个字节)。

模式

描述

典型结构'[类型:大小(位)]'

0001

Numeric

[0001 : 4] [字符数标识 : 可变] [数据位流 : 10 × charcount]

0010

Alphanumeric

[0010 : 4] [字符数标识 : 可变] [数据位流 : 11 × charcount]

0100

Byte encoding

[0100 : 4] [字符数标识 : 可变] [数据位流 : 8 × charcount]

1000

Kanji encoding

[1000 : 4] [字符数标识 : 可变] [数据位流 : 13 × charcount]

0011

Structured append

[00114] [符号位置:4] [总符号:4] [奇偶校验:8]

0111

ECI

[01114] [ECI分配号:变量]

0101

FNC1 in first position

[0101 : 4] [数字/字母数字/字节/汉字有效载荷:变量]

1001

FNC1 in second position

[1001 : 4] [应用指标 : 8] [数字/字母数字/字节/汉字有效载荷 : 变量]

0000

End of message

[0000 : 4]




请注意:

l  字符数指标取决于一个QR码(符号版)中有多少个模块。

l  ECI分配数大小:

n  如果ECI分配位流以'0'开头,则为8×1位。

n  如果ECI分配位流以'10'开头,则为8×2位。

n  如果ECI分配位流以'110'开头,则为8×3位。

四位标识用于选择编码模式和传递其他信息。

编码模式:

标识

意义

0001

数字编码(3位数字10)

0010

字母数字编码(2个字符11)

0100

字节编码(每个字符8)

1000

汉字编码(每字13)

0011

结构化追加(用于将一条信息分割成多个QR符号)

0111

扩展通道解释(选择备用字符集或编码)。

0101

FNC1在第一位置

1001

FNC1居第二位

0000

信息结束(终结者)

 

编码模式可以根据需要在一个QR符号中混合。(例如,一个带有一长串字母数字字符的网址)

 

[模式标识][模式位流] --> [模式标识][模式位流] --> ......--> [0000 信息结束(终止符)]

 

在每一个选择编码模式的标识之后,都有一个长度字段,告诉人们在该模式下有多少字符被编码。长度字段的位数取决于编码和符号版本。

 

长度字段的位数(字符数指示器)。

 

编码

Ver. 1–9

10–26

27–40

数字

10

12

14

字符数字

9

11

13

字节

8

16

16

汉字

8

10

12

 

字母数字编码模式比字节模式能更紧凑地存储信息,但不能存储小写字母,而且只有有限的标点符号选择,这对于初级的网址来说已经足够。两个字符通过这个公式在11位值中进行编码:

 

V = 45 × C1 + C2

 

这有一个例外,即奇数长度的字母数字字符串中的最后一个字符会被读取为一个6位值。

 

字母数字字符代码

 

代码

字符

代码

字符

代码

字符

代码

字符

代码

字符

00

0

09

9

18

I

27

R

36

空格

01

1

10

A

19

J

28

S

37

$

02

2

11

B

20

K

29

T

38

%

03

3

12

C

21

L

30

U

39

*

04

4

13

D

22

M

31

V

40

+

05

5

14

E

23

N

32

W

41

06

6

15

F

24

O

33

X

42

.

07

7

16

G

25

P

34

Y

43

/

08

8

17

H

26

Q

35

Z

44

:

 

6      参考

 

https://en.wikipedia.org/wiki/QR_code

https://www.qr-code-generator.com/

https://github.com/zxing/zxing

https://opensource.google/projects/zxing#:~:text=ZXing%20(%E2%80%9Czebra%20crossing%E2%80%9D),1D%20industrial%2C%20and%202D%20barcodes.

https://zxing.org/w/decode.jspx


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。