您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 基于小型数据库的PDF417编码及软件实现
基于小型数据库的PDF417编码及软件实现论文摘要:条形码是国内外比较常用的二维条码,对其研究具有非常重要的意义。PDF417主要由起始符、终止符、左右行指示符号字符、纠错码字符和数据区符号字符组成。PDF417条码具有较强纠错能力,本文用VC#编写的软件实现了简单的字母、数字和汉字编码,程序包括字符、数字压缩,码字纠错和图像生成,提出了将数据库和数组结合使用的方法,提高了程序的执行效率。实验表明程序能够很好实现编码、打印和纠错能力。论文关键词:基于,小型,数据库,编码,软件1引言条码识别技术是以计算机图像处理、模式识别、光电技术和通信技术为基础的综合技术,是当今最主要的自动识别技术之一。目前我国使用得较多的是一维条码,但一维条码的容量小,保密性差,只能标识而不能描述产品,在很大程度上依赖于数据库。二维条码具有信息量大、可靠性高、保密防伪等优点,已经逐渐用于通信、物流、身份识别等领域。作为当今最先进的条码技术之一,PDF417条形码已经广泛用于各种证件、票据的管理、公共安全、物流和图书馆等领域,研究它具有重要的意义。2PDF417二维条码的结构2.1PDF417码的码字结构四一七条码符号是一个多行结构。每行从左到右依次为:左空白区,起始符,左行指示符号字符,1~30个数据符号字符,右行指示符号字符,终止符,右空白区。规定行数为3~90行。条码结构如图1所示。图1PDF417结构图图2符号字符每一码字符号字符由4个条和4个空构成,从左向右开始。每一个条或空包含1~6个模块。在一个符号字符中,4个条和4个空总模块数为17,如图2所示。2.2符号字符的簇四一七条码符号字符集由0,3,6这三个簇构成,每一簇包括以不同的条、空形式表示的所有929个条码的码字。在每一簇中,每一符号字符所对应唯一的码字,起范围为0~928。第一、二、三行分别使用第0、3、6簇的符号字符,第四行使用第0簇的符号字符,以此类推。行号由上向下递增,最上一行行号为1。2.3行指示符号字符行指示符号字符包括左、右行指示符号字符()。簇号和指示符的计算方法见文献。3PDF417编码3.1压缩模式PDF417码有三种数据压缩模式,包括文本压缩、数字压缩和字节压缩。3.2PDF417编码首先通过基于VC#对话框界面中的编辑框录入信息,将录入的字符串放入name数组中保存起来。对name数组进行第一次压缩编码,存入数组strfencode中,默认为文本压缩模式,信息录入后被放入数组name中,根据每个数组元素的字符类型不同压缩编码方式有所不同,可以查询到不同输入字符所对应的码值。这里,处理方法是将大写字母、小写字母分别放在数组TC_LOWCHAR和TC_UPCHAR中,按字母表顺序依次存放,在输入姓名信息后在字母数组TC_LOWCHAR或TC_UPCHAR中搜索和name[i]相同的元素,然后记录其在数组TC_LOWCHAR或TC_UPCHAR中对应的位置j。一次压缩编码的值就为TC_DATA[j],并将此值存入strencode[k]中。如果输入状态有变化那么要加转移码字II(大写字母子模式转换成小写字母子模式)或as(小写字母子模式转换成大写字母子模式),二者值均为27。判断后将值存入strfencode[k++]中。如果输入为空格,那么码字值为固定值32。例如输入信息“XiaoLei”,得到的第一次编码值strfencode=“900,23,27,8,0,14,32,11,27,4,8”。再根据文本压缩模式的原理,从第一个码字开始,将strfencode的元素两两组合够成一个字符,然后用“”来计算出二次压缩编码的数值,并存入数组m_ncode中,二次压缩编码流程如图3所示。图3二次文本压缩流程图二次编码得到的结果为“900,717,240,452,357,128”。一般连续数字个数超过13则采用数字压缩模式。数字压缩模式的核心算法是10进制向900进制的转换,如果直接进行转换,会导致溢出,出现负数的结果,本文采用的办法时将其转化为字符串数组后再进行压缩。由于文字叙述较为繁琐,本文给出了数字压缩模式的流程,如图4所示。图4数字压缩模式流程图我们最常用的汉字所采用的是字节压缩模式。我国国家标准规定汉字用内码(Unicode)表示,每个内码占用两个字节,每个字节只用7位,若连续两个字节的最高位为1,则该字符为汉字。字节压缩主要是通过基256至基900的转换,将字节序列转换为码字序列。当所要表示的字节总数不是6的倍数时,采用模式901;当所要表示的字节总数为6的倍数时,用模式锁定924。字节压缩流程如图5所示。图5字节压缩流程图二维条码之所以性能强于一维条码的原因还在于引入了纠错码字。PDAF417码的错误纠正码字总共有9个等级,对于一个给定的错误纠正等级,其错误纠正容量由(1)式决定。(1)其中,为拒读错误,为替代错误,为错误纠正等级,为错误纠正码字数。根据错误纠正容量计算式可知,当错误纠正等级为0时,错误纠正码字数为2;当错误纠正等级为8时,错误纠正码字数为512。根据纠错码表达式,包括符号数据多项式和生成多项式。纠错码字的生成首先要建立符号数据多项式,系数由数据码字区的码字组成,符号数据多项式如(3)所示。(2)生成多项式如(7)所示。(3)对于一组给定的数据码字和选定的错误纠正等级,错误纠正码字为符号数据多项式乘以,然后除以生成多项式,所得余式的各项系数的补数。但是多项式系数在错误纠正等级越高的时候,其计算量越来越大,对于程序来讲这是很不利的。我们发现由于生成码字多项式的系数和数据码字没有关系,大约有1000个数左右,可以事先通过计算将其所有的系数算出来,把9个纠错等级的系数放在9个数组当中,这就可以很方便地利用类似查表的办法得到所有的纠错码字多项式系数,所得余式的各系数的补数得到纠错码,的大小由选择的纠错等级决定。经过文本压缩后的字符串为“717,240,452,357,128”,考虑到本文只是阐述编码,只说明纠错码的生成方式,所以选择纠错等级为1,输出的纠错码为“835,7,880,388”。我们得到的这些数据还不能保证后面绘制的图像是一个工整的长方形,就需要在码字数组中适当加入少量空白码字,通常选择900作为空白码进行填充。4PDF417码图形产生符号字符的查询常用的办法仍然是采用数组,而在这里应用了一个小型的数据库。这个数据库并不是用来存储汉字,字母和数字信息的,而是将符号字符-码字集放在其中,之所以选择数据库的原因是方便码字或符号字符出错时容易找到并及时修改。创建一张ACCESS的表格,包括三组关键词:“簇号”、“码字”和“bsbsbsbs”(条空符号字符)。根据簇号选择每一行码字和其应该对应的条空符号字符,利用ADO.NET连接程序和数据库。在绘图时必须要知道条空对应的模块宽度,确定条与空的相对位置,而查询到的符号字符是每8个字符为一组的字符串,并不是以单个字符为元素的数组,本文将字符串数组进行了转换。绘图选择了GDI+的PEN类进行绘制,GDI+比GDI进步的地方是用PEN类绘制条码图像进行放大的时候边缘部分并不会产生毛刺,这在后面对条码进行识别的时候会减小一些困难。如符号字符为“22411322”,表示2个模块(条),2个模块(空),4个条,1个空…符号字符在字符数组中的位置序号能被2整除的为“条”,否则为“空”。再将单个字符转换为整数形式获得条或空的宽度并进行绘制。通常取的单位模块高与宽的比为3:1。图6为本文所写的编码软件。例如,在空白处输入信息“卿晓雷loveJordan23”,点击“运行程序”,在图中所示位置产生了相应的PDF417条形码,该条码包含了汉字,字母和数字。软件最下方是一个符号字符-码字集的对照表,便于在数据出现错误的时候及时进行改正。图6PDF417编码软件最后图形可以BMP的形式保存在电脑中,方便打印。5结束语本文阐述了PDF417码的结构,压缩模式和纠错码字,实现了编码及条码的绘制,本文的创新点是把数组和小型数据库结合使用,使码字和纠错码生成多项式的查找更方便,提高了软件执行效率,结果表明生成条码的正确性,并可以移植和打印,用于日常生活中。
本文标题:基于小型数据库的PDF417编码及软件实现
链接地址:https://www.777doc.com/doc-2574773 .html