PDF417二维码原理

PDF417条码编码原理及Visual C++实现

张瑜,黄朝兵5 (武汉理工大学信息工程学院,武汉 430070) 摘要:介绍了PDF417条码的编码原理,采用字节压缩(BC)模式,应用Visual C++编程实现PDF417条码的绘制,对编码过程中出现的纠错等级过高数据溢出的问题和编码数据信息大小不确定情况下,生成条码的恰当长宽比例问题给出了解决方法,实现了PDF417关于汉字的编码软件,编写出了条码生成的动态链接库文件,方便二次开发。

关键词:二维条码;PDF417条码;编码算法;数据溢出

中图分类号:TP317.4

10

Encoding theory of Bar Code PDF417 and its

implementation in Visual C++

Zhang Yu, Huang Chaobing

15 (School of Information Engineering,Wuhan university of Technology, WuHan 430070)

Abstract: The principle of encoding barcode PDF417 based on 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 solved.Meantime,PDF417 software about Chinese character encoding is developed.The dynamic link libraries concerning about the generation of barcode is programmed, which is convenient for secondary development.

Keywords: 2D barcode; pdf417; arithmetic of encoding; data overflow

20

25 0 引言

条形码技术是在计算机应用和实践中产生并发展起来的一种自动识别技术,具有输入速度快、准确度高、成本低、可靠性强等优点。随着高新技术的发展,为了在有限的几何空间里表示更多的信息,出现了二维条码[1]。其中应用最广泛的二维条码为美国Symbol公司发明的PDF417条码。从诞生之始,PDF417二维条码就受到了国际社会的广泛关注。现已广30 泛地应用在国防、公共安全、交通运输、医疗保健、工业、商业、金融、海关及政府管理等

领域[2]。本人着力于PDF417、Data Matrix、 Maxi Code、QR Code等常见的二维条码的编码与译码软件的研究开发。本文主要应用Visual C++软件开发工具,在字节压缩(BC)模式下完成PDF417条码的编码,并对于编码过程中经常遇到的几个问题给出了解决方法。同时编写出PDF417条码的编码动态链接库文件[3],方便其他开发环境如Matlab,Delphi,VB35 等直接调用,为二次开发提供了平台。该软件已完成测试,其具有编码速度快,准确率高,

移植性强等显著特点。

1 PDF417条码简介

PDF417条码是一种高密度、高信息含量的便携式数据文件。PDF是Portable Data File40 的缩写,它是一种多层次、可变长、具有高容量和错误纠错能力强的二维条码(图1)[4]。

作者简介:张瑜,(1987-),女,硕士,主要研究方向:图像处理。

通信联系人:黄朝兵,(1964-),男,副教授,主要研究方向:图像处理与模式识别,基于内容图像检索,视频处理与检索. E-mail: [email protected]

每个PDF417二维条码符号字符由4个条和4个空构成,每个条或空包含1~6个模块,总模块数为17,所以被称为PDF417条码(图2)。每行数据符号字符数相同,行与行左右直接衔接,最小行数为3,最大行数为90[2]。

b1

b2b3b4

1234图1 PDF417 条码符号结构

45 图2 PDF417条码符号字符

2 PDF417条码的编码

PDF417条码的编码可分为3个部分:数据区码子编码,错误纠正码子编码,添加行指示符号字符和起始符,终止符。如图3所表示[5]

0 1 n−1 n−2

0 1 n−1 n

0 k−1 1 k−2 0 n−1 n 终 止 符

50 图3 数据,行表示及错误纠正码子

数据区码子编码有文本压缩模式(TC),数字压缩模式(NC)、字节压缩模式(BC)3种数据压缩模式。

2.1 文本压缩模式编码

55 文本压缩模式包括四个子模式:大写字母型子模式(Alpha)、小写字母型子模式(Lower

Case)、混合型子模式(Mixed),标点型子模式(Punctuation)。在子模式中,每一个字符对应一个值(0~29),即可以用一个单独的码子表示一个字符对,表示字符对的码子由下式计算:

码子=30× H + L (1) 60 其中H,L依次表示字符对中的高位低位字符值。如果在一个字符串的尾部有奇数个基

为30的值,需要用值为29的虚拟字符ps填充最后一个码子[2]。

2.2 数字压缩模式编码

数字压缩模式是从基10至基900的数据压缩的一种方法,能把约三个数字位用一个码子表示。数字模式下编码时,将数字序列从左到右每44个位分为一组,最后一组包含的数65 字位可以少于44个。对于每一组数字,首先在数字序列前加一位有效数字1(即前导位),

然后执行基10至基900的转换。 2.3 字节压缩模式编码

由于3中编码方式基本思路是相同的,下面仅以字节压缩模式编码为例,来详细说明其编码算法:

70 2.3.1 数据区码子编码

字节压缩模式通过基256至900的转换,将字节序列转换为码子序列。字节压缩模式有2个模式锁定(901,924)。当所要表示的字节总数为6的倍数时,模式锁定为924,反之即字节总数不是6的倍数时,模式锁定为901。应用模式锁定924的情况下,6个字节可通过基256至900的转换用5个码子表示,从左到右进行转换。当所要表示的字节数不是675 的倍数时,模式锁定为901,前6个或6的倍数个字节按照上述方法进行转换,对于被6整

除所剩余的字节每个字节 对应一个码子,逐字节用码子表示。

生成码子矩阵时,根据开始设定的纠错等级s确定错误纠正码子个数k

k=2s+1 (2)

其中s为纠错等级。数据区码子格式为:

80 ' m+模式锁定标号(901或924)+码子+纠错码子 (3)

m'=数据码子数(包含虚拟码子900的个数)+错误纠正码子数+2) (4) 将数据区码子变换成码子矩阵,矩阵的列数为开始设定的Columns,当码子的总数不能正好填充矩阵时,用码子900作为虚拟码子填充。例如设定数据区列数为5,数据码子设定纠错等级为2,故由(2)式知,错误纠正码子个数为8,输入的数据信息为“中华人民共和85 国标准 PDF417 Bar code”数据码子为: 32 901 359 894 449 426 147 328 332 175 314 245 311

602 518 378 244 54 136 704 760 81 92 343 549 526 216 99 111 100 101 900,计算可知只含一个虚拟填充码子900。

注意对于汉字编码时,汉字在计算机中,每个汉字由2个字节构成,即高位字节和低位字节。汉字的高位字节与低位字节的取值范围为A1H~FEH,最高位都为“1”,所以显示90 为负数,例如汉字“中”计算机将显示“-42,-48”可以通过(5)式转换

data=255+data/+1 (5)

data/ 为读入的汉字(负数),data为转换后的数据。所以在编码时先判断读入数据是否大于0,如果为负数表示输入的为汉字先进性转换,在按照编码算法进行编码。

2.3.2

95 错误纠正码子编码[6] PDF417条码错误纠正码子码子编码主要采取目前国际上最先进的纠错码技术之一的

RS(reed—solomon)纠错算法。

PDF417条码有8个纠错等级,对应的纠错码子数目如(2)式所示,对于给定的错误

s+1纠正等级S,其错误纠正容量由 e+2t≤2−2确定。其中:e为拒读错误数目;t为替代

错误数目。

100 由前边得到数据码子和错误纠正等级计算错误纠正码子。步骤如下:

1) 建立符号数据多项式

d(x)=dn−1xn−1+dn−2xn−2+...d1x+d0 (6)

和填充码子,排列位置见图3。

105

其中n为码子个数,式中多项式系数由数据区码子构成,包括符号长度码子、数据码子2) 建立纠错码子生成多项式: g(x)=(x−3)(x−32)(x−33)...(x−3k)=xk+gk−1xk−1+...+g1x+g0 (7) 对于每一组确定的数据码子和设定的纠错等级,可由(7)式确定其错误纠正码子,错误纠正码子为符号数据多项式d(x)乘以xk,然后除以生成多项式g(x)得到的余式的各项系数的

110 补数c0,c1,c2,...ck−2,ck−1[5]。

将生成的错误纠正码子填入3式,按照图3,生成数据区码子矩阵,保存到整形二维数组code中。对于数据信息:“中华人民共和国标准 PDF417 Bar code”在错误纠正等级为2级下对应的数据区码子矩阵如图5所示。

115

2.3.3 行指示符号字符

PDF417条码符号字符集由三个簇构成,簇号分别为0,3,6,每一簇包括以不同的条、空形式表示的所有929个条码码子。

行指示符号字符包括左行指示符号字符(Li)和右行指示符号字符(Ri)

120 左行指示符号字符(Li)的值有下式确定:

30xi+y if(ci==0);

Li30xi+z if(ci==3);

30xi+v if(ci==6);

右行指示符号字符(Ri)的值有下式确定:

125 30xi+v if(ci==0);

Ri30xi+y if(ci==3);

30xi+z if(ci==6);

其中 xi=INT[(行号-1)/3] i为行号,i=0,1.,2….

y= INT[(行数-1)/3]

130 z=错误纠正等级×3+(行数-1)

v=数据区列数-1

中国科技论文在线 http://www.paper.edu.cn

Ci=[(i-1)mod 3 ]*3 第i行簇号。

通过上边的公式可以计算出每行的行指示符号字符,按照图3所示,根据行号(i),

和右行指示符号字符(Ri)赋值到数据区码子二维数组code分别将左行指示符号字符(Li)

135 中。然后根据符号字符码子集查表求得每个码子对应的条空序列,将码子矩阵变换为条空矩

阵。最后,将code数组里面的每个元素转换为2进制数,即每个元素变成长度为17的1,0条空序列,生成了1,0条空矩阵。PDF417的起始符和终止符是唯一确定的,其始符号是81111113,终止符是711311121,对应的1,0条空序列:其始符号为[**************]00,终止符号为[***********],分别按照图3所示填在1,0条空矩阵每行的对应位置。 140 3 PDF417条码的绘制

由1,0条空序列矩阵可以直接完成条码的绘制。首先设定好每个小模块的长度和高度,单位为像素。利用Visual C++中的绘图函数(Rectangle)按照1,0条空矩阵绘图,即遇到“1”则用一个矩形条,对于“0”则只需将横坐标增加最小模块的长度。注意在换行是高度增加最小模块的高度。最后通过画刷(CBrush)对象为各个“条”矩形着色,连接各点,绘制145 出二维条形码的图形,将绘制的PDF417条码显示并保存为24位图。

PDF417条码编码软件共有3中条码生成模式可供选择:⒈人工设定模式,即设定纠错等级等条码相关参数生成条码;⒉自动生成模式,设顶条码生成区域的长和宽,在该区域内自动生成最优条码,最优条码问题在讨论中详细叙述。⒊一键生成,即根据输入的数据的多少,软件自动选择纠错等级等相关参数生成条码。生成条码耗时直接显示,方便明了,对生150 成条码的各项参数可以通过“条码信息”按纽查看。

4 编写PDF417条码动态链接库文件

为了提高程序的执行效率和便于二次开发[3],我们还将条码生成函数编写成动态链接库函数:int * creatcode(int array[], int datanum, int s, int an ) ,入口参数为输入数:据数组 array,输入数据个数datanum,纠错等级s,数据区列数an,返回值为生成的1,0条空矩阵数组的155 首地址。

5 数据溢出问题

本文介绍了PDF417条码的编码原理,主要采用字节压缩(BC)模式在Visual C++下编程实现PDF417条码的绘制,现就以下编码过程中容易出现的几个问题进行讨论。

① 在计算错误纠正码子时,由(6)式可知,如果错误纠正等级过高,g(x)展开时会160 出现数据溢出问题。参考文献[7]给出的确定生成多项式(6)中各项系数的计算机实现方法,

本文进行了改进如下:

165

中国科技论文在线

170 http://www.paper.edu.cn i其中 k=2s+1,G[0][k]表示在纠错等级s下x0的系数,G[i][k] 表示在纠错等级s下x

的系数。r[1]表示31,r[2]表示32…r[k]表示3k。以上算法主要是采用mol 929的方法,保证每次迭代时数据不会超出929,避免了数据的溢出,经过实验证明能够正确计算任何错误纠错等级下的生成多项式的系数,不会发生溢出现象,同时由于每次迭代数据都小于929,故程序运算速度快,提高了程序运行的效率。

175 ② PDF417条码大多用于条码标签,所以当设定合适的生成条码区域参数width,hight,

即条码标签的面积大小时,由于其他参数不确定,故生成的条码也不确定,如(8)式示

f(s,an,r)=α*s+β*an+χ*r (8) 其中f为纠错等级s,数据区列数an,最小模块长宽比r下生成的条码,α,β,χ分别为各个参数的权重。纠错等级s无疑是最重要的参数指标。输入字符数据,矩形区域的面积 180 S=width*hight (9)

由于PDF417条码采用的是压缩编码,故使得

δ*(2s+1+m)

δ=1*r (11) 185 这里取最小模块的长度为1,r为最小模块的宽与长的比值。 故可以由(10)式确定出

最大纠错等级s和参数r。然后由(12)式确定数据区列数an的最大值。

(an+4)*17+1

设定的矩形区域的面积S过小,系统可以进行判断提示重新设定。

190 6 结束语

本文介绍了PDF417条码的编码原理,并对基于字节模式压缩(BC)下,编码过程中几个容易出现问题给出了优化算法,提出了最优条码的概念,最终实现了PDF417条码的快速编码和绘制,对生成的PDF417条码直接进行保存。编写了PDF417条码生成的动态链接库,为二次开发提供了平台。本软件共有3中条码生成模式可供选择,条码生成速度快,执195 行效率高。已由本人的软件测试通过。

[参考文献] (References)

[1] 张铎.条码技术与电子数据交换[M].中国铁道出版社,2000-01

[2] 中国物品编码中. GB/T 17172—1997.四一七条码 417 Bar code[J].1997-12-25

[3] 孙鑫,余安萍 VC++深入详解[M].电子工业出版社,2006-6。

[4] Afzel Noore, Nikhil Tungala, Max M. Houck . Embedding biometric identifiers in 2D barcodes for improved security[J]. Computers & Security, Volume 23, Issue 8, December 2004, Pages 679-686.

[5] 扬清华,张宗橙 二维条形码(PDF417)的编码与实现[J].大众科技,2007-7:85-86。

[6] 徐秉铮,欧阳景正,冯贵良译,BLAHUTRE.差错控制码的理论与实践[M] .华南理工大学出版社,1998。

[7] 戴水贵,吴晓联 PDF417纠错码原理及实现[J].解放军理工大学学报(自然科学版),2006,4:138-140. 200 205

PDF417条码编码原理及Visual C++实现

张瑜,黄朝兵5 (武汉理工大学信息工程学院,武汉 430070) 摘要:介绍了PDF417条码的编码原理,采用字节压缩(BC)模式,应用Visual C++编程实现PDF417条码的绘制,对编码过程中出现的纠错等级过高数据溢出的问题和编码数据信息大小不确定情况下,生成条码的恰当长宽比例问题给出了解决方法,实现了PDF417关于汉字的编码软件,编写出了条码生成的动态链接库文件,方便二次开发。

关键词:二维条码;PDF417条码;编码算法;数据溢出

中图分类号:TP317.4

10

Encoding theory of Bar Code PDF417 and its

implementation in Visual C++

Zhang Yu, Huang Chaobing

15 (School of Information Engineering,Wuhan university of Technology, WuHan 430070)

Abstract: The principle of encoding barcode PDF417 based on 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 solved.Meantime,PDF417 software about Chinese character encoding is developed.The dynamic link libraries concerning about the generation of barcode is programmed, which is convenient for secondary development.

Keywords: 2D barcode; pdf417; arithmetic of encoding; data overflow

20

25 0 引言

条形码技术是在计算机应用和实践中产生并发展起来的一种自动识别技术,具有输入速度快、准确度高、成本低、可靠性强等优点。随着高新技术的发展,为了在有限的几何空间里表示更多的信息,出现了二维条码[1]。其中应用最广泛的二维条码为美国Symbol公司发明的PDF417条码。从诞生之始,PDF417二维条码就受到了国际社会的广泛关注。现已广30 泛地应用在国防、公共安全、交通运输、医疗保健、工业、商业、金融、海关及政府管理等

领域[2]。本人着力于PDF417、Data Matrix、 Maxi Code、QR Code等常见的二维条码的编码与译码软件的研究开发。本文主要应用Visual C++软件开发工具,在字节压缩(BC)模式下完成PDF417条码的编码,并对于编码过程中经常遇到的几个问题给出了解决方法。同时编写出PDF417条码的编码动态链接库文件[3],方便其他开发环境如Matlab,Delphi,VB35 等直接调用,为二次开发提供了平台。该软件已完成测试,其具有编码速度快,准确率高,

移植性强等显著特点。

1 PDF417条码简介

PDF417条码是一种高密度、高信息含量的便携式数据文件。PDF是Portable Data File40 的缩写,它是一种多层次、可变长、具有高容量和错误纠错能力强的二维条码(图1)[4]。

作者简介:张瑜,(1987-),女,硕士,主要研究方向:图像处理。

通信联系人:黄朝兵,(1964-),男,副教授,主要研究方向:图像处理与模式识别,基于内容图像检索,视频处理与检索. E-mail: [email protected]

每个PDF417二维条码符号字符由4个条和4个空构成,每个条或空包含1~6个模块,总模块数为17,所以被称为PDF417条码(图2)。每行数据符号字符数相同,行与行左右直接衔接,最小行数为3,最大行数为90[2]。

b1

b2b3b4

1234图1 PDF417 条码符号结构

45 图2 PDF417条码符号字符

2 PDF417条码的编码

PDF417条码的编码可分为3个部分:数据区码子编码,错误纠正码子编码,添加行指示符号字符和起始符,终止符。如图3所表示[5]

0 1 n−1 n−2

0 1 n−1 n

0 k−1 1 k−2 0 n−1 n 终 止 符

50 图3 数据,行表示及错误纠正码子

数据区码子编码有文本压缩模式(TC),数字压缩模式(NC)、字节压缩模式(BC)3种数据压缩模式。

2.1 文本压缩模式编码

55 文本压缩模式包括四个子模式:大写字母型子模式(Alpha)、小写字母型子模式(Lower

Case)、混合型子模式(Mixed),标点型子模式(Punctuation)。在子模式中,每一个字符对应一个值(0~29),即可以用一个单独的码子表示一个字符对,表示字符对的码子由下式计算:

码子=30× H + L (1) 60 其中H,L依次表示字符对中的高位低位字符值。如果在一个字符串的尾部有奇数个基

为30的值,需要用值为29的虚拟字符ps填充最后一个码子[2]。

2.2 数字压缩模式编码

数字压缩模式是从基10至基900的数据压缩的一种方法,能把约三个数字位用一个码子表示。数字模式下编码时,将数字序列从左到右每44个位分为一组,最后一组包含的数65 字位可以少于44个。对于每一组数字,首先在数字序列前加一位有效数字1(即前导位),

然后执行基10至基900的转换。 2.3 字节压缩模式编码

由于3中编码方式基本思路是相同的,下面仅以字节压缩模式编码为例,来详细说明其编码算法:

70 2.3.1 数据区码子编码

字节压缩模式通过基256至900的转换,将字节序列转换为码子序列。字节压缩模式有2个模式锁定(901,924)。当所要表示的字节总数为6的倍数时,模式锁定为924,反之即字节总数不是6的倍数时,模式锁定为901。应用模式锁定924的情况下,6个字节可通过基256至900的转换用5个码子表示,从左到右进行转换。当所要表示的字节数不是675 的倍数时,模式锁定为901,前6个或6的倍数个字节按照上述方法进行转换,对于被6整

除所剩余的字节每个字节 对应一个码子,逐字节用码子表示。

生成码子矩阵时,根据开始设定的纠错等级s确定错误纠正码子个数k

k=2s+1 (2)

其中s为纠错等级。数据区码子格式为:

80 ' m+模式锁定标号(901或924)+码子+纠错码子 (3)

m'=数据码子数(包含虚拟码子900的个数)+错误纠正码子数+2) (4) 将数据区码子变换成码子矩阵,矩阵的列数为开始设定的Columns,当码子的总数不能正好填充矩阵时,用码子900作为虚拟码子填充。例如设定数据区列数为5,数据码子设定纠错等级为2,故由(2)式知,错误纠正码子个数为8,输入的数据信息为“中华人民共和85 国标准 PDF417 Bar code”数据码子为: 32 901 359 894 449 426 147 328 332 175 314 245 311

602 518 378 244 54 136 704 760 81 92 343 549 526 216 99 111 100 101 900,计算可知只含一个虚拟填充码子900。

注意对于汉字编码时,汉字在计算机中,每个汉字由2个字节构成,即高位字节和低位字节。汉字的高位字节与低位字节的取值范围为A1H~FEH,最高位都为“1”,所以显示90 为负数,例如汉字“中”计算机将显示“-42,-48”可以通过(5)式转换

data=255+data/+1 (5)

data/ 为读入的汉字(负数),data为转换后的数据。所以在编码时先判断读入数据是否大于0,如果为负数表示输入的为汉字先进性转换,在按照编码算法进行编码。

2.3.2

95 错误纠正码子编码[6] PDF417条码错误纠正码子码子编码主要采取目前国际上最先进的纠错码技术之一的

RS(reed—solomon)纠错算法。

PDF417条码有8个纠错等级,对应的纠错码子数目如(2)式所示,对于给定的错误

s+1纠正等级S,其错误纠正容量由 e+2t≤2−2确定。其中:e为拒读错误数目;t为替代

错误数目。

100 由前边得到数据码子和错误纠正等级计算错误纠正码子。步骤如下:

1) 建立符号数据多项式

d(x)=dn−1xn−1+dn−2xn−2+...d1x+d0 (6)

和填充码子,排列位置见图3。

105

其中n为码子个数,式中多项式系数由数据区码子构成,包括符号长度码子、数据码子2) 建立纠错码子生成多项式: g(x)=(x−3)(x−32)(x−33)...(x−3k)=xk+gk−1xk−1+...+g1x+g0 (7) 对于每一组确定的数据码子和设定的纠错等级,可由(7)式确定其错误纠正码子,错误纠正码子为符号数据多项式d(x)乘以xk,然后除以生成多项式g(x)得到的余式的各项系数的

110 补数c0,c1,c2,...ck−2,ck−1[5]。

将生成的错误纠正码子填入3式,按照图3,生成数据区码子矩阵,保存到整形二维数组code中。对于数据信息:“中华人民共和国标准 PDF417 Bar code”在错误纠正等级为2级下对应的数据区码子矩阵如图5所示。

115

2.3.3 行指示符号字符

PDF417条码符号字符集由三个簇构成,簇号分别为0,3,6,每一簇包括以不同的条、空形式表示的所有929个条码码子。

行指示符号字符包括左行指示符号字符(Li)和右行指示符号字符(Ri)

120 左行指示符号字符(Li)的值有下式确定:

30xi+y if(ci==0);

Li30xi+z if(ci==3);

30xi+v if(ci==6);

右行指示符号字符(Ri)的值有下式确定:

125 30xi+v if(ci==0);

Ri30xi+y if(ci==3);

30xi+z if(ci==6);

其中 xi=INT[(行号-1)/3] i为行号,i=0,1.,2….

y= INT[(行数-1)/3]

130 z=错误纠正等级×3+(行数-1)

v=数据区列数-1

中国科技论文在线 http://www.paper.edu.cn

Ci=[(i-1)mod 3 ]*3 第i行簇号。

通过上边的公式可以计算出每行的行指示符号字符,按照图3所示,根据行号(i),

和右行指示符号字符(Ri)赋值到数据区码子二维数组code分别将左行指示符号字符(Li)

135 中。然后根据符号字符码子集查表求得每个码子对应的条空序列,将码子矩阵变换为条空矩

阵。最后,将code数组里面的每个元素转换为2进制数,即每个元素变成长度为17的1,0条空序列,生成了1,0条空矩阵。PDF417的起始符和终止符是唯一确定的,其始符号是81111113,终止符是711311121,对应的1,0条空序列:其始符号为[**************]00,终止符号为[***********],分别按照图3所示填在1,0条空矩阵每行的对应位置。 140 3 PDF417条码的绘制

由1,0条空序列矩阵可以直接完成条码的绘制。首先设定好每个小模块的长度和高度,单位为像素。利用Visual C++中的绘图函数(Rectangle)按照1,0条空矩阵绘图,即遇到“1”则用一个矩形条,对于“0”则只需将横坐标增加最小模块的长度。注意在换行是高度增加最小模块的高度。最后通过画刷(CBrush)对象为各个“条”矩形着色,连接各点,绘制145 出二维条形码的图形,将绘制的PDF417条码显示并保存为24位图。

PDF417条码编码软件共有3中条码生成模式可供选择:⒈人工设定模式,即设定纠错等级等条码相关参数生成条码;⒉自动生成模式,设顶条码生成区域的长和宽,在该区域内自动生成最优条码,最优条码问题在讨论中详细叙述。⒊一键生成,即根据输入的数据的多少,软件自动选择纠错等级等相关参数生成条码。生成条码耗时直接显示,方便明了,对生150 成条码的各项参数可以通过“条码信息”按纽查看。

4 编写PDF417条码动态链接库文件

为了提高程序的执行效率和便于二次开发[3],我们还将条码生成函数编写成动态链接库函数:int * creatcode(int array[], int datanum, int s, int an ) ,入口参数为输入数:据数组 array,输入数据个数datanum,纠错等级s,数据区列数an,返回值为生成的1,0条空矩阵数组的155 首地址。

5 数据溢出问题

本文介绍了PDF417条码的编码原理,主要采用字节压缩(BC)模式在Visual C++下编程实现PDF417条码的绘制,现就以下编码过程中容易出现的几个问题进行讨论。

① 在计算错误纠正码子时,由(6)式可知,如果错误纠正等级过高,g(x)展开时会160 出现数据溢出问题。参考文献[7]给出的确定生成多项式(6)中各项系数的计算机实现方法,

本文进行了改进如下:

165

中国科技论文在线

170 http://www.paper.edu.cn i其中 k=2s+1,G[0][k]表示在纠错等级s下x0的系数,G[i][k] 表示在纠错等级s下x

的系数。r[1]表示31,r[2]表示32…r[k]表示3k。以上算法主要是采用mol 929的方法,保证每次迭代时数据不会超出929,避免了数据的溢出,经过实验证明能够正确计算任何错误纠错等级下的生成多项式的系数,不会发生溢出现象,同时由于每次迭代数据都小于929,故程序运算速度快,提高了程序运行的效率。

175 ② PDF417条码大多用于条码标签,所以当设定合适的生成条码区域参数width,hight,

即条码标签的面积大小时,由于其他参数不确定,故生成的条码也不确定,如(8)式示

f(s,an,r)=α*s+β*an+χ*r (8) 其中f为纠错等级s,数据区列数an,最小模块长宽比r下生成的条码,α,β,χ分别为各个参数的权重。纠错等级s无疑是最重要的参数指标。输入字符数据,矩形区域的面积 180 S=width*hight (9)

由于PDF417条码采用的是压缩编码,故使得

δ*(2s+1+m)

δ=1*r (11) 185 这里取最小模块的长度为1,r为最小模块的宽与长的比值。 故可以由(10)式确定出

最大纠错等级s和参数r。然后由(12)式确定数据区列数an的最大值。

(an+4)*17+1

设定的矩形区域的面积S过小,系统可以进行判断提示重新设定。

190 6 结束语

本文介绍了PDF417条码的编码原理,并对基于字节模式压缩(BC)下,编码过程中几个容易出现问题给出了优化算法,提出了最优条码的概念,最终实现了PDF417条码的快速编码和绘制,对生成的PDF417条码直接进行保存。编写了PDF417条码生成的动态链接库,为二次开发提供了平台。本软件共有3中条码生成模式可供选择,条码生成速度快,执195 行效率高。已由本人的软件测试通过。

[参考文献] (References)

[1] 张铎.条码技术与电子数据交换[M].中国铁道出版社,2000-01

[2] 中国物品编码中. GB/T 17172—1997.四一七条码 417 Bar code[J].1997-12-25

[3] 孙鑫,余安萍 VC++深入详解[M].电子工业出版社,2006-6。

[4] Afzel Noore, Nikhil Tungala, Max M. Houck . Embedding biometric identifiers in 2D barcodes for improved security[J]. Computers & Security, Volume 23, Issue 8, December 2004, Pages 679-686.

[5] 扬清华,张宗橙 二维条形码(PDF417)的编码与实现[J].大众科技,2007-7:85-86。

[6] 徐秉铮,欧阳景正,冯贵良译,BLAHUTRE.差错控制码的理论与实践[M] .华南理工大学出版社,1998。

[7] 戴水贵,吴晓联 PDF417纠错码原理及实现[J].解放军理工大学学报(自然科学版),2006,4:138-140. 200 205


相关文章

  • 一维条形码与二维条形码的区别比较
  • 一维条形码与二维条形码的区别比较 一维条形码只是在一个方向(普通是程度方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准. 一维条形码的应用能够进步信息录入的速度,减少过失率,但是一维条形码也存在一些缺乏之 ...查看


  • 二维码基础知识
  • 在我国,具有完全自主知识产权的二维码核心技术体系的自动识别企业已在演出市场.体育赛事等大型活动的票务系统,电子折扣券业务和电子VIP 业务,媒体出版等领域取得了成功应用. 什么是二维码 二维码也叫二维条码或二维条形码( 2-dimensio ...查看


  • 条码技术与应用练习题1
  • 第一.二章条码的概述 一.单选题 1.﹍﹍﹍国际物品编码协会﹍的宗旨是建立全球统一标识系统,促进国际贸易.其主要任务是协调全球统一标识系统在各国的应用,确保成员组织规划与步调的充分一致.A A 国际物品编码协会B 中国条码技术与应用协会C ...查看


  • 物联网业务介绍
  • 物联网业务介绍 (1) 国内外物联网发展现状及存在问题 从国际上看,欧盟.美国.日本等国都十分重视物联网的工作,并且已做了大量研究开发和应用工作.如美国把它当成重振经济的法宝,所以非常重视物联网和互联网的发展,它的核心是利用信息通信技术(I ...查看


  • 二维条码在尾气治理中的应用方案,希创条码,二维条码专题
  • 二维条码在尾气治理中的应用方案 随着我国汽车工业的迅猛发展,我们也面临着汽车工业带来的巨大压力:环保问题.在环境质量日趋恶化的情况下,环保已经成为全社会共同关心的焦点问题. 为减少汽车尾气排放,整治大气污染,政府出台了一系列的政策法规.例如 ...查看


  • 二维码背景
  • 背景技术:全球二维码技术标准 在国外,二维码是一项非常成熟的技术.国外对二维码技术的研究始于20世纪80年代末.在二维码符号表示技术研究方面,已研制出多种码制,全球现有的一.二维码多达250种以上,其中常见的有PDF417,QRCode,C ...查看


  • 条码技术在物流中的应用研究
  • 合肥财经学院 系 别 专 业 年 级 学 制 学 号 姓 名 毕业论文(实践)报告 2013 年 10 月 [内容摘要]随着互联网时代的到来,信息的传播.交流发生了巨大的变化.信息成为现代 物流的灵魂.互联网技术所推动的信息革命使得物流现代 ...查看


  • 基于二维条码技术的物流管理解决方案,希创条码,二维条码专题
  • 基于二维条码技术的物流管理解决方案 在ERP/MRPII系统中,如果基础数据的采集与传递中出现失实,则决策系统得出的数据就变得毫无意义.分析国内外一些企业实施ERP系统失败的原因,大部分是由于失败的数据采集所致. 在数据采集.数据传递方面, ...查看


  • 物联网理论题库1
  • 物联网理论试题1 一.选择题 1.通过无线网络与互联网的融合,将物体的信息实时准确地传递给用户,指的是() . A .可靠传递 B .全面感知 C .智能处理 D .互联网 2.利用 RFID .传感器.二维码等随时随地获取物体的信息,指的 ...查看


热门内容