PDF417二维码原理-_第1页
PDF417二维码原理-_第2页
PDF417二维码原理-_第3页
PDF417二维码原理-_第4页
PDF417二维码原理-_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PDF417条码编码原理及Visual C+实现张瑜,黄朝兵作者简介:张瑜,(1987-,女,硕士,主要研究方向:图像处理。通信联系人:黄朝兵,(1964-,男,副教授,主要研究方向:图像处理与模式识别,基于内容图像检索,视频处理与检索. E-mail: huang_cb(武汉理工大学信息工程学院,武汉 430070 摘要:介绍了PDF417条码的编码原理,采用字节压缩(BC模式,应用Visual C+编程实5 现PDF417条码的绘制,对编码过程中出现的纠错等级过高数据溢出的问题和编码数据信息大小不确定情况下,生成条码的恰当长宽比例问题给出了解决方法,实现了PDF417关于汉字的编码软件,编

2、写出了条码生成的动态链接库文件,方便二次开发。关键词:二维条码;PDF417条码;编码算法;数据溢出中图分类号:TP317.410Encoding theory of Bar Code PDF417 and itsimplementation in Visual C+Zhang Yu, Huang Chaobing(School of Information Engineering,Wuhan university of Technology, WuHan 43007015 Abstract: The principle of encoding barcode PDF417 based on

3、the mode of bytes compression is introduced.It is drawn by programming tool of Visual C+.The problems occuring during the process of encoding,such as data overflow for high grade of error correction and the appropriate barcode area at the circumstances of encoding data size uncertain,have been all s

4、olved.Meantime,PDF417 software about Chinese character encoding is developed.The dynamic 20link libraries concerning about the generation of barcode is programmed, which is convenient for secondary development.Keywords: 2D barcode; pdf417; arithmetic of encoding; data overflow0 引言25 条形码技术是在计算机应用和实践中

5、产生并发展起来的一种自动识别技术,具有输入速度快、准确度高、成本低、可靠性强等优点。随着高新技术的发展,为了在有限的几何空间里表示更多的信息,出现了二维条码1。其中应用最广泛的二维条码为美国Symbol 公司发明的PDF417条码。从诞生之始,PDF417二维条码就受到了国际社会的广泛关注。现已广泛地应用在国防、公共安全、交通运输、医疗保健、工业、商业、金融、海关及政府管理等30 领域2。本人着力于PDF417、Data Matrix 、 Maxi Code 、QR Code 等常见的二维条码的编码与译码软件的研究开发。本文主要应用Visual C+软件开发工具,在字节压缩(BC 模式下完成P

6、DF417条码的编码,并对于编码过程中经常遇到的几个问题给出了解决方法。同时编写出PDF417条码的编码动态链接库文件3,方便其他开发环境如Matlab ,Delphi ,VB 等直接调用,为二次开发提供了平台。该软件已完成测试,其具有编码速度快,准确率高,35 移植性强等显著特点。1 PDF417条码简介PDF417条码是一种高密度、高信息含量的便携式数据文件。PDF 是Portable Data File 的缩写,它是一种多层次、可变长、具有高容量和错误纠错能力强的二维条码(图14。40 每个PDF417二维条码符号字符由4个条和4个空构成,每个条或空包含16个模块,总模块数为17,所以被

7、称为PDF417条码(图2。每行数据符号字符数相同,行与行左右直接衔接,最小行数为3,最大行数为902。45 2 PDF417条码的编码PDF417条码的编码可分为3个部分:数据区码子编码,错误纠正码子编码,添加行指示符号字符和起始符,终止符。如图3所表示50L 1n d 2n d 0R 1L 1R 1n L 0d 1k c 2k c 1n R起始符n L1c 0c n R 终 止 符图3 数据,行表示及错误纠正码子50 数据区码子编码有文本压缩模式(TC ,数字压缩模式(NC 、字节压缩模式(BC 3种数据压缩模式。2.1 文本压缩模式编码文本压缩模式包括四个子模式:大写字母型子模式(Alp

8、ha 、小写字母型子模式(Lower55 Case 、混合型子模式(Mixed ,标点型子模式(Punctuation 。在子模式中,每一个字符对应一个值(029,即可以用一个单独的码子表示一个字符对,表示字符对的码子由下式计算:码子=30× H + L (1 其中H ,L 依次表示字符对中的高位低位字符值。如果在一个字符串的尾部有奇数个基60 为30的值,需要用值为29的虚拟字符ps 填充最后一个码子2。2.2 数字压缩模式编码数字压缩模式是从基10至基900的数据压缩的一种方法,能把约三个数字位用一个码子表示。数字模式下编码时,将数字序列从左到右每44个位分为一组,最后一组包含的

9、数字位可以少于44个。对于每一组数字,首先在数字序列前加一位有效数字1(即前导位,65 图1 PDF417 条码符号结构b 2s 3s 4b 4b 3s 1s 2b 11511121图2 PDF417条码符号字符然后执行基10至基900的转换。 2.3 字节压缩模式编码由于3中编码方式基本思路是相同的,下面仅以字节压缩模式编码为例,来详细说明其编码算法:2.3.1 数据区码子编码70 字节压缩模式通过基256至900的转换,将字节序列转换为码子序列。字节压缩模式有2个模式锁定(901,924。当所要表示的字节总数为6的倍数时,模式锁定为924,反之即字节总数不是6的倍数时,模式锁定为901。应

10、用模式锁定924的情况下,6个字节可通过基256至900的转换用5个码子表示,从左到右进行转换。当所要表示的字节数不是6的倍数时,模式锁定为901,前6个或6的倍数个字节按照上述方法进行转换,对于被6整75 除所剩余的字节每个字节 对应一个码子,逐字节用码子表示。生成码子矩阵时,根据开始设定的纠错等级s 确定错误纠正码子个数k12s k += (2 其中s 为纠错等级。数据区码子格式为:'m +模式锁定标号(901或924+码子+纠错码子 (380 错误纠正码子数的个数码子数据码子数(包含虚拟2900'+=m (4 将数据区码子变换成码子矩阵,矩阵的列数为开始设定的Column

11、s ,当码子的总数不能正好填充矩阵时,用码子900作为虚拟码子填充。例如设定数据区列数为5,数据码子设定纠错等级为2,故由(2式知,错误纠正码子个数为8,输入的数据信息为“中华人民共和国标准 PDF417 Bar code ”数据码子为: 32 901 359 894 449 426 147 328 332 175 314 245 31185 602 518 378 244 54 136 704 760 81 92 343 549 526 216 99 111 100 101 900,计算可知只含一个虚拟填充码子900。注意对于汉字编码时,汉字在计算机中,每个汉字由2个字节构成,即高位字节和低

12、位字节。汉字的高位字节与低位字节的取值范围为A1HFEH ,最高位都为“1”,所以显示为负数,例如汉字“中”计算机将显示“-42,-48”可以通过(5式转换90 /2551data data =+ (5/data 为读入的汉字(负数,data 为转换后的数据。所以在编码时先判断读入数据是否大于0,如果为负数表示输入的为汉字先进性转换,在按照编码算法进行编码。2.3.2错误纠正码子编码6 PDF417条码错误纠正码子码子编码主要采取目前国际上最先进的纠错码技术之一的95 RS (reed solomon 纠错算法。PDF417条码有8个纠错等级,对应的纠错码子数目如(2式所示,对于给定的错误纠正

13、等级S,其错误纠正容量由 1222s e t +确定。其中:e 为拒读错误数目;t 为替代错误数目。由前边得到数据码子和错误纠正等级计算错误纠正码子。步骤如下:100 1 建立符号数据多项式121210(.n n n n d x d x d x d x d =+ (6其中n 为码子个数,式中多项式系数由数据区码子构成,包括符号长度码子、数据码子和填充码子,排列位置见图3。2 建立纠错码子生成多项式: 105231110(3(3(3.(3.k k k k g x x x x x x g x g x g =+ (7 对于每一组确定的数据码子和设定的纠错等级,可由(7式确定其错误纠正码子,错误纠正码

14、子为符号数据多项式(x d 乘以k x ,然后除以生成多项式(x g 得到的余式的各项系数的补数12210,.,k k c c c c c 5。110 将生成的错误纠正码子填入3式,按照图3,生成数据区码子矩阵,保存到整形二维数组code 中。对于数据信息:“中华人民共和国标准 PDF417 Bar code ”在错误纠正等级为2级下对应的数据区码子矩阵如图5所示。 115 2.3.3 行指示符号字符PDF417条码符号字符集由三个簇构成,簇号分别为0,3,6,每一簇包括以不同的条、空形式表示的所有929个条码码子。行指示符号字符包括左行指示符号字符(i L 和右行指示符号字符(i R 左行指

15、示符号字符(i L 的值有下式确定:120 y x i +30 0(=i c if ;i L = z x i +30 3(=i c if ;v x i +30 6(=i c if ;右行指示符号字符(i R 的值有下式确定:v x i +30 0(=i c if ;125 i R = y x i +30 3(=i c if ;z x i +30 6(=i c if ;其中 i x =INT(行号-1/3 i 为行号,i =0,1.,2.y= INT(行数-1/3z=错误纠正等级×3+(行数-1130 v=数据区列数-1i C =(i -1mod 3 *3 第i 行簇号。通过上边的公式

16、可以计算出每行的行指示符号字符,按照图3所示,根据行号(i ,分别将左行指示符号字符(i L 和右行指示符号字符(i R 赋值到数据区码子二维数组code 中。然后根据符号字符码子集查表求得每个码子对应的条空序列,将码子矩阵变换为条空矩135 阵。最后,将code 数组里面的每个元素转换为2进制数,即每个元素变成长度为17的1,0条空序列,生成了1,0条空矩阵。PDF417的起始符和终止符是唯一确定的,其始符号是81111113,终止符是711311121,对应的1,0条空序列:其始符号为11111111010101000,终止符号为111111101000101001,分别按照图3所示填在1

17、,0条空矩阵每行的对应位置。 3 PDF417条码的绘制140 由1,0条空序列矩阵可以直接完成条码的绘制。首先设定好每个小模块的长度和高度,单位为像素。利用Visual C+中的绘图函数(Rectangle 按照1,0条空矩阵绘图,即遇到“1”则用一个矩形条,对于“0”则只需将横坐标增加最小模块的长度。注意在换行是高度增加最小模块的高度。最后通过画刷(CBrush 对象为各个“条”矩形着色,连接各点,绘制出二维条形码的图形,将绘制的PDF417条码显示并保存为24位图。145 PDF417条码编码软件共有3中条码生成模式可供选择:人工设定模式,即设定纠错等级等条码相关参数生成条码;自动生成模

18、式,设顶条码生成区域的长和宽,在该区域内自动生成最优条码,最优条码问题在讨论中详细叙述。一键生成,即根据输入的数据的多少,软件自动选择纠错等级等相关参数生成条码。生成条码耗时直接显示,方便明了,对生成条码的各项参数可以通过“条码信息”按纽查看。150 4 编写PDF417条码动态链接库文件为了提高程序的执行效率和便于二次开发3,我们还将条码生成函数编写成动态链接库函数:int * creatcode(int array, int datanum, int s, int an ,入口参数为输入数:据数组 array,输入数据个数datanum ,纠错等级s,数据区列数an ,返回值为生成的1,0

19、条空矩阵数组的首地址。155 5 数据溢出问题本文介绍了PDF417条码的编码原理,主要采用字节压缩(BC 模式在Visual C+下编程实现PDF417条码的绘制,现就以下编码过程中容易出现的几个问题进行讨论。 在计算错误纠正码子时,由(6式可知,如果错误纠正等级过高,(x g 展开时会出现数据溢出问题。参考文献7给出的确定生成多项式(6中各项系数的计算机实现方法,160 本文进行了改进如下: 165中国科技论文在线 170 i 其中 k = 2 s +1 ,G0k表示在纠错等级 s 下 x 0 的系数, Gik 表示在纠错等级 s 下 x 的系数。r1表示 31 ,r2表示 3 2 rk表

20、示 3 k 。以上算法主要是采用 mol 929 的方法,保 证每次迭代时数据不会超出 929,避免了数据的溢出,经过实验证明能够正确计算任何错误 纠错等级下的生成多项式的系数,不会发生溢出现象,同时由于每次迭代数据都小于 929, 故程序运算速度快,提高了程序运行的效率。 175 PDF417 条码大多用于条码标签,所以当设定合适的生成条码区域参数 width,hight, 即条码标签的面积大小时,由于其他参数不确定,故生成的条码也不确定,如(8式示 f (s, an, r = * s + * an + * r (8) 其中 f 为纠错等级 s,数据区列数 an ,最小模块长宽比 r 下生成

21、的条码, , , 分别为 各个参数的权重。纠错等级 s 无疑是最重要的参数指标。输入字符数据,矩形区域的面积 180 S = width * hight 由于 PDF417 条码采用的是压缩编码,故使得 (9) *(2 s +1 + m < S s 为纠错等级,常数 m 为输入数据个数, 为最小模块的面积 (10) = 1* r 185 最大纠错等级 s 和参数 r。然后由(12式确定数据区列数 an 的最大值。 (11) 这里取最小模块的长度为 1,r 为最小模块的宽与长的比值。 故可以由(10)式确定出 (an + 4 *17 + 1 < width 以上就是确定最优条码各个参数的过程,当然如果输入数据字符的个数过大 设定的矩形区域的面积 S 过小,系统可以进行判断提示重新设定。 190 (12) 6 结束语 本文介绍了 PDF417 条

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论