摘要:介绍PDF417二维条码的编码、译码及纠错的原理,并分析其在嵌入式设备上的软硬件实现。其中译码部分是使用Symbol公司生产的SE923HS型号的扫描头,编码部分是用软件来实现的。
关键词:PDF417 二维条码编码译码 嵌入式设备
引 言
??二维条码是不依赖计算机网络和数据库存储、转移信息的一种方法,是信息的另一种表示形式,是信息携带、信息自动传递、信息防伪的理想手段。四一七条码是应用最为成功的一种二维条码,它的出现是条码技术的一次革新。它以其高密度、高信息容量、纠错能力强、成本低等特点,广泛应用于国际贸易、物流、工业、商业等领域,已经取得了巨大的社会效益和经济效益。由于二维条码的编码和译码算法相对比较复杂,大部分应用是用台式机打印出条码,再通过扫描枪进行解码,通过RS232串口输出数据;而在嵌入式设备上,对数据进行二维条码数据加密并不多见。本文提出一种在嵌入式设备上利用Symbol公司生产的SE923HS型号的扫描头解码数据,解码后的数据和其它数据混合重新编码的解决方案,可以适用于邮政、物流等行业。
1 二维条码
1.1 二维条码的特性
PDF417二维条码具有信息容量大、信息密度高、修正错误能力强、译码可靠性高、保密性强和容易印制等特点。
四一七条码的基本特性如图1所示。一个PDF417条码符号,可以将最多1848个字母字符或2729个数字字符或字母、数字混编字符进行编码。按照ISO标准的证卡格式,当PDF417条码的窄条(模)宽为0.17mm 时,使用PDF417条码表卡片上所含的信息,条码符号(包括周围的白区)所占面积仅为76mm×25mm。PDF417采用了目前世界上最先进的错误修正技术。这种隐含子符号内的错误修正技术,不仅可以有效地防止译码错误,提高译码的速度及可靠性,而且可以将由于条码符号破损、沾污等丢失的信息破译出来。错误修正可分为八个等级,错误修正为最高时,可以将符号受损面积达50%的条码符号所含信息复现出来;PDF417可以把编码信息按密码格式进行编码,以防止伪造条码符号或非法使用有关编码的信息。因此,可以将数据量不大但非常重要的信息按照某种二维条码的格式进行编码。
本文是将二维条码用在物品投递过程中,即把物品的信息(如寄信人地址、姓名、身份证号,收信人地址、姓名、身份证号以及邮资等信息)制成二维条码,打印出来贴在物品上,以便传递信息。通过掌上嵌入式的条码识读设备,对条码进行译码。在掌上嵌入式设备工作过程中,译码的信息可以和其它输入的信息重新编码,完成对数据再加密的过程。
1.2 PDF417条码的结构
四一七条码符号是一个多行结构。符号的顶部和底部为空白区。上下空白区之间为多行结构。每行数据符号字符数相同,行与行左右对齐直接衔接。其最小行数为3,最大行数为90,见图1。每行构成如下:
a) 左空白区;b)起始符;c) 左行指示符号字符;d) 1~30个数据符号字符;e)右行指示符号字符;f) 终止符;g)右空白区。
1.3 PDF417条码的模式结构
四一七条码在编码时,首先对未编码数据进行压缩。四一七条码有三种数据压缩模式:文本压缩模式(TC)、字节压缩模式(BC)、数字压缩模式(NC)。每种模式结构对应不同的算法,通过应用模式锁定/转移(latch/shift)码字,可在一个四一七条码符号中应用一种或者多种模式表示数据。图2为四一七条码的模式切换图,其中900、901/924、902分别对应TC、BC和NC的压缩模式,913为Latch/shift码字。
1.4 PDF417条码的错误纠正等级
四一七条码的错误纠正等级可由用户选择。每种错误纠正等级所对应的错误纠正码字数目为2的纠正等级次方。对于开放式系统,不同数量的编码数据所对应的错误纠正等级推荐值见表1。
表1 四一七条码的推荐错误纠正等级
数据码字数 |
错误纠正等级 |
1~40 |
2 |
40~160 |
3 |
161~320 |
4 |
321~863 |
5 |
在四一七条码符号容易损坏的场所,建议选用较高的错误纠正等级;在封闭系统中,可选用低于推荐错误纠正等级的错误纠正等级。
2 硬件设计
2.1 硬件总体结构[1]
物流信息采集终端设计方案的结构框图如图3所示。设计方案的主要组成部分包括微处理器、扫描头接口模块(SE923HS)、液晶显示及触摸模块以及外部的32KB RAM,还有电源模块和微处理器监控模块等其它模块。
2.2 SE923HS扫描头及其接口设计[2]
扫描头的主要功能是读出二维条码上的信息;在读出信息的同时,完成一定的解码和纠错功能。本课题采用SE923HS型号的扫描头。它是Symbol公司生产的微型条码读入设备,可以对UPC/EAN、CODE128、CODE39和PDF417等条码进行译码。它能嵌入到用户的设备中,完成
数据采集的功能。SE923HS大小约为3cm3,通过12根引线和外界相连。表2给出了SE923HS的引脚说明。
根据表2给出的接口说明,设计了SE923HS与微控制器的硬件接口,如图4所示。
表2 SE923H的引脚说明
引 脚 |
引脚号 |
类 型 |
功 能 解 释 |
FLASH_DWN |
1 |
I |
写SE923HS的Flash-ROM |
VBATT |
2 |
I |
Power Supply:为SE923HS提供工作电压 |
GND |
3 |
I |
Ground:地线 |
RXD |
4 |
I |
Received Data:串行输入口 |
CTS |
6 |
I |
Clear to Send:串口握手线 |
AIM/WKUP |
11 |
I |
Wake Up:用持续1μs的低电平唤醒低电模式的SE923HS |
TRIG |
12 |
I |
Trigger:硬件触发线,使SE923HS进入扫描和译码 |
TXD |
5 |
O |
Transmitted Data:串口输出口 |
RTS |
7 |
O |
Request to Send:串口输出口 |
PWRDWN |
8 |
O |
Power Down Ready:高电平,表示Decoder处于掉电模式 |
BPR |
9 |
O |
Beeper:低电流Beeper输出 |
DLED |
10 |
O |
Decode LED:电流LED输出 |
3 译码和编码的实现
3.1 软件总体流程
根据SE923HS与微控制器的接口图,软件总体上可分为扫描头工作函数和中断函数,流程如图5和图6所示。
用SE923HS译码程序相对简单。首先,设置好SE923HS与W77E58通信的波特率。然后,打开串口中断,在需要扫描条码时将P1.2置为低电平,进入3s的延时,扫描电机开始工作。在延时时间内,扫描头一直处于工作状态,扫描头译码后的数据输入至单片机产生串口中断,在中断函数中存储译码后的信息。一般来说,SE923HS扫描头有效工作1s后可以将纸质的扫描译码完毕。P1.2置为高电平时,扫描电机停止工作。
对解码后的数据进行后期处理,将这些数据和其它需要重新加密的数据重新二维条码编码和纠错,得到加密后的数据。这些数据可以通过RS232、USB或者蓝牙发送给上位机作相应的处理。
3.2 二维条码编码和纠错
在实际应用中,考虑到在应用中投递物品信息组成和单片机处理速度,投递物品上的信息多用汉字表示,且文本字符和数字的数量较少,所以可以只用字节压缩模式(BC)对其进行编码。这样可大大减小编译码的复杂性,并且对数据的压缩率影响也不大。再有,由PDF417条码标准规定,条码符号的行数不超过90行,数据区列数不超过30列,所以最多可以编2700个码字。纠错码最多512个,那么数据码最多可编2188个。但是由于PDF417条码标准规定数据区第一个码字表示数据区码字的个数,这就限制了数据区码字最多不超过928个,也就是说译码最多只能译 928个码字,没有用到编码数量的极限。当要编码的数据较多时,则可以作如下改动:采用2个码字表示数据区码字的个数,这样就可以做到编码个数的极限2188个码字。因此在具体应用时,根据情况灵活地运用PDF417条码标准是很重要的。
为统一起见,在编码过程中只采用模式结构中的字节压缩模式(BC)。现简要介绍如下:
字节压缩模式通过基256至基900的转换,将字节序列转换为码字序列。当所要表示的字节总数不是6的倍数时,用模式锁定901;当所要表示的字节总数是6的倍数时,用模式锁定924。在应用模式锁定924的情况下,6个字节可通过基256至基900的转换用5个码字表示,从左到右进行转换。在应用模式锁定901的情况下,每前6个字节的转换方法与上述方法相同,对被6整除所剩余的字节应每个字节对应一个码字,逐字节用码字表示。具体编码流程如图7所示。
四一七条码采用Reed-Solomon错误控制算法(简称RS码)对数据码字进行纠错编码和译码。RS码是一类可以纠正多个随机错误的多进制循环码。对于一组给定的数据码字,根据不同的码字个数采用相应的纠错等级,错误纠正码字根据Reed-Solomon错误控制码算法计算。
对于一个给定的错误纠正等级,其错误纠正容量由下式确定:
式中: e-拒读错误数目; t-替代错误数目;
s-错误纠正等级; d-错误纠正码字数目。
错误纠正码字的总数为2s+1。其中,两个用于错误检测。其余的错误纠正码字用于错误纠正。用一个错误纠正码字恢复一个拒读错误,用两个错误纠正码字纠正一个替代错误。
当被纠正的替代错误数目小于4时(s=0除外),错误纠正容量由下式确定:
e+2t ≤ d-3
对于一组给定的数据码字,错误纠正码字根据RS错误控制码算法计算。
(1)建立符号数据多项式
(2)建立纠正码字的生成多项式
(3)产生错误纠正码字
对一组给定的数据码字和一选定的错误纠正等级,错误纠正码字为符号数据多项式d(x)乘以xk,然后除以生成多项式g(x),所得为余式的各系数的补数。
注:解码、编码和纠错程序见本刊网站www.dpj.com.cn。
图7
4 结 论
本文提供了一种简单可行的PDF417二维条码译码和编码的方案。利用PDF417二维条码具有信息容量大、编码范围广、容错能力强、译码可靠性高、保密防伪性好、成本低、条码形状和尺寸可变等优点,使SE923HS扫描头和W77E58微控制器结合,成本低、可行性强。在小数据量(小于1000字节)和较低纠错级别(5级以下)时,编码和纠错时间在10s之内,处理速度优势明显。