二维码生成和识别原理

二维码介绍

二维码主要有以下几种类型,本次主要以QRCODE为切入点。
在这里插入图片描述

版本

QRcode主要有40个版本(v1 -> V40)
符号的范围是2121(version 1)===>177177(version 40)。每提升一个版本长和宽各添加4个符号位长度。
版本定位: 其版本定位由V-E来标识。V标识其版本号(1-40),E定义其纠错码级别(L、M、Q、H),后面会有介绍到;

基本结构

在这里插入图片描述
空白区: 包围在最外层的四个module宽度的区域。主要用于分割主内容部分,提高二维码识别效率。
位置探测图形(定位符): 左上,右上,左下角各一个定位符。所有的定位符都是有77的深色,55的亮色,33的深色module组成。定位符会被优先识别,通过其来得知二维码的位置、旋转、拉伸、偏移等信息。用来确认符号的笛卡尔坐标表示的。
**定位图像(时序符):**由一个module宽度组成的符号,可以是亮色可以是深色。提供了符号的密度和版本信息,用来定位和提供数据的位置和确定module的坐标。在QR Code中分别位于横向和钟祥的第六行和第六列。
校正图形(校正符): QR Code在版本V2以上才有,所有的校正符都是由5
5的深色,3*3的亮色和一个深色的module来组成,数量与版本有关。
**编码区域:**符号上没有被功能符号占用的区域,用于存储编码数据,纠错码,版本信息内容。

编码流程概览:

1.数据解析
2.数据编码
3.纠错码编码
4.重构最后信息
5.矩阵转换
6.数据遮掩
7.格式和版本信息

数据解析

解析输入的数据串来确定是采用默认或则是扩展的ECI模式来解析内容。

解析输入的数据串来决定是采用默认或者是扩展的ECI模式来解析内容。所以我们需要在一个符号编码切换到另外的编码,来尽可能减少比特数据流的长度。这样至少其中的某一部分或者几个部分可以更有效率的。比如 数字序列可以按照数字文本模式解读。理论上最有效率的模式是每个数据字符需要最小的比特长度的,但是有些时候模式的指示符号会被跳过,而且这个和每次模式切换的字符长度有关。在一些最短暂的比特流字符串可能不会被此都会转换。并且因为二维码的数据容量的增长步骤和版本是分离的,所以我们可能没必要每次都以最有效率的方式解析。

编码模式

输入数据流是由一个或者几个置顶编码模式形成的碎片的比特流组成的。比特流的编码规则由第一个模式指示符号决定。
QRCode默认ECI时000003,就是iso8859-1字符集

支持的编码模式有:
1.数组编码(Numeric mode)
默认由纯数字0-9或者字节数据(16进制30-39),通常三个数字字符被10个bit标识。
2.数字文本模式(Alphaumeric mode)
数字文本模式由45个字符集合内的数据编码而成。包括 十个数字 0-9(30-39 hex)26个字符(A-Z)(41-5A HEX),以及9个符号(SP,$,%,*,+,-,./😅(20,24,25,2A,2b,2d-2f,3a HEX).正常情况下两个字符被11个bit所标识
3.字节模式(Byte mode)
该模式下,每个字符被编码为8比特。当字符集被修改时,解码应用程序也会相应变化。
4.日本字模式(kanji mode)
5.混合模式(Mixing modes)
6.结构添加模式(Structured Append mode)
7.FNC1模式(FNC1 mode)
编码表
在这里插入图片描述

在这里插入图片描述

数字模式

输入的字符串数据,会被分组成由三个数字组成的小组,并且每个小组的数据都会被切换成10个比特的二进制模式。如果划分后的数字不为三个,则被一二位会分别转换为4个比特或7个比特。

例子1 对于1H级别的数据来说
输入数据为 01234567

转换为三个数字分组 012 345 67

按组进行二进制转换 012 转换为 0000001100 345转换为 0101011001 67转换为1000011

讲数字链接成数据子句 0000001100 0101011001 1000011

讲字符长度转换为2进制的标示(1H版本是10个比特

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值