二维条码PDF417译码技术

来源:互联网 发布:r软件基础使用 编辑:程序博客网 时间:2024/05/01 11:14
  摘要:对二维条友PDF417的基本概念、用途、优势做了系统的介绍,着重分析了PDF417条码的具体译码过程,并给出该条码作为多进制码,进行R-S纠错译码时所要注意的有关域运算及模运算。

    关键词:PDF417条码 有限域 错误纠正容量 错误位置多项式

条码的使用,极大地提高了数据采集和信息处理的速度,改善了人们的工作和生活环境,提高了工作效率,为管理的科学化和现代化作出了很大贡献。

受信息容量的限制,一维条码的使用不得不依赖于后台的数据库。在没有数据库或不便联网的地方,一维条码的使用便受到了局限。为此,美国Symbol公司发明了一条被称作为便携数据文件的二维条码——PDF417条码。

1 PDF417条码简介

PDF417是一种具有高密度、高容量的便携式数据文件,它能容纳大量信息而不需要与外部数据库相连。一个PDF417符号能容纳1千字节数据,是尺寸同样大小的一维条码的百倍。通过使用PDF417,诸如人员信息、档案信息、发货标签、装船清单、设备校准信息、机动车登记等立即变成机器可识读的标识。

PDF417条码具有一个显著的优点便是纠错能力强,它采用了目前世界上最先进的错误正技术。这种隐含子符号在内的错误纠正技术,不仅可以有效地防止译码错误,提高译码的速度及可靠性;而且可以将由于条码符号破损、沾污等丢失的信息破译出现。错误纠正可分为八个等级,当等待为八时最高,可以将符号受损面积达50%的条码符号所含的信息复现出来。

图1为PDF417码符号结构。符号的顶部和底部为空白区。上下空白区之间为多行结构。每行的数据符号字符数相同,行与行左右对齐直接衔接。

图2为符号字符的结构。每一符号由4个条件和4个空构成,自左向右从条开始。每一个条或空包含1~6个模块。在一个符号字节中,4个条和4个空的总模块数为17。

2 译码的具体过程

译码的具体过程如图3所示。

2.1 条码的纠错译码

PDF417条码在识读过程中,由于条码图案的损坏,或扫描及扫描后的数据传输出错,会出现突发错误。Reed-Solomon码特别适合纠正突发错误。故采用R-S码进行纠错译码。

R-S码是一类具有很强纠错能力的多进制BCH码,其译码步骤主要分为三步:

第一步由收到码字R(x)计算d-1个伴随式分量sj;第二步由伴随式求错误位置多项式,得出错误图样E(x);第三步由R(x)-E(x)得出最可能发送的码字C(x)。

其中错误图样包括随机错误(既不知道错误位置,又不知错误大小)和删除错误(知道错误所在位置,不知错误大小)。在求删除错误时,二时制BCH码的纠错纠删译码很简单。把收到的R(x)中删除位置全填上0,并送到译码器译码。但多进制码必须对伴随式进行修正。该半随式包含两个错误位置多项式:一是删除位置多项式,另一是错误位置多项式。总的错误位置多项式等待二者的乘积。

2.2 条码译码过程

417条码码字集包含929个码字:0~928。所谓码字集即一种条形码制中所给定的数据字符的范围。

码字0~899:用于表示数据(根据当前的压缩模式和GLI解释),每个码字表示一个或多个数字、字母或符号。

码字900~928:900:901、902、913、924用于各压缩模式标记;925、926、927用于GLI(全球标识标记符,不同的GLI具有相应的码字解释);922、923、928用于宏417码(当文件内容太长,无法用一个417条符号表示时,可用包含多个宏417条码的分块表示);921用于条码识读器初始化;903~912,914~920保留待用。

    为了有效地压缩并表示数据,PDF417采用三种数据压缩模式设置来组成字符集。

2.2.1 文本压缩模式(TC)

码字为900时锁字该模式,分管大写字母型子模式、小写字母型子模式、混合型子模式、标点型子模式。通过标准字符集所对应的特定数值可以完成各子模式间的切换,可进行转移切换(即只对切换后的第一个码字有限,随后返回),亦可进行锁定切换(该模式切换到下一个切换前一直有效)。

每种子模式选择文件中出现频率较高的一种字符组成的字符集。在子模式中,GLI标准规定了文本压缩模式下每个字符所对应的值(0~29),一个字符对应一个单独的码字:

码字=30×H+L

式中:H、L依次表示字符对中的高位和低位字符值。

任何模式到文本压缩模式(TC)的锁定都是到大写字母型子模式的(Alpha)锁定。在文本压缩模式中,每一个码字用两个基为30的值表示(范围为0~29)。如果在一个字符串的发展部有奇数个基为30的值,需要用值为29的虚拟字符ps填充最后一个码字。算法如下:

(1)由到码字/30,商为高位字符值,余数的低位字符值;

(2)由字符值确定是哪种子模式;

(3)查找该子模式下,字符值对应的文本值,恢复原始信息。

2.2.2 字节压缩模式(BC)

当所要表示的字节总数不是6的倍数时,用码字901锁定;否则用924锁定,码字913转移为该模式,通过基256至基900的转移,将2位十六进制的数据序列转换为码字序列。算法如下:

(1)用924锁定模式

例如:一个2位十六进制的数据序列01H,02H,03H,04H,05H,06H(H代表十六进制)

1×256e5+2×256e4+3×256e3+4×256e2+5×256+6=1×900e4+620×900e3+89×900e2+74×900+846

从而表示为一个码字序列:924,1,620,89,74,846

(2)用901锁定模式

前6字节的转换方法同上,剩下的每字节对应一个码字,依次直接表示数列:01H,02H,03H,04H,05H,06H,07H,08H,04H

转换为一个码字序列:901,1,620,89,74,846,7,8,4

将收到的每5个mod900的码字转换为十进制数,继而转换为6个mod256数,分别按十六进制的数输出。若码字个数非6的倍数,则将码字个数被6整除后余下的mod900的码字直接按十六进制输出。

2.2.3 数字压缩模式(NC)

码字为902时锁定该械,通过基10至基900的换算,实现数据位数的压缩,能把约3个数据位用一个码字表示。当数字位数大于13,用数字压缩模式;数字位数小于13,用文本压缩模式。算法如下:

(1)每15个码字从左到右分为一组(每15个码字可转换为44个数字位),其最后一组码字可少于15个。

(2)对于每一组码字先执行基900至基10的转换然后去掉前导位1。

2.2.4 译码的总体流程

译码的总体流程图如图4所示。

图4 译码的总体流程图

3 有关PDF417译码过程中的几个关键问题

3.1 有关域的运算

PDF417条码码字集包含929个码字,即码字取值范围为0~928,故译码始终在有限域GF(929)中进行,超出GF(929)域的项必须通过mod(929)转化到GF(929)中。

错误纠正码字δ>-929,在有限域GF(929)中的负值等于该值的补数;如果δ<=-929,在有限域GF(929)中的负值=余数(δ/929)的补数。

3.2 从已知的简单模2算法到PDF417需用的模929算法方案的实现

3.2.1 本原元与本原多项式

GF(929)中的所有元素均能由3生成,故PDF417码的本原元为3,而GF(929)中以3为根的最小多项式为

m(x)=x-3

故该式为PDF417码的本原多项式。

3.2.2 求逆运算

在GF(929)中所有的除法均通过求逆得到。求逆即:xix-i=1--->x-i为xi的逆(x为本原元)。域中元素通过GF(929)<--->3i mod929中,即:

GF(929)--->ximod929--->x-imod929--->GF(929)

二维条码PDF417技术国内的使用正处于上升阶段。它数据容量更大,超越了字节数字的限制,条码相对尺寸小,具有抗损毁能力,不再需要后台数据库的支持,应用范围非常广泛。同时用户可以根据需要进行前端加密,从而提高条码的保密性和防伪性。一些大厂商、大企业、大银行或是政府性质的部门等实力雄厚的单位是二维条码的主要使用单位。如果将此技术进一步推广,市场前景将非常可观。

本算法已通过软件实现。