Visual C++数字图像模式识别典型案例详解
上QQ阅读APP看书,第一时间看更新

3.2.1 常用的条形码编码规则

条形码符号从表面上看只是一些粗、细线条组合而成的图案,但其中包含了有意义的信息。这些信息不仅包含条形码数据,还有一些必要的相关信息。通过光电系统读取信号,并做出正确的判断便可获取这些信息。

1.条形码的一般组成

条形码(Barcode)是将宽度不等的多个条和空,按照一定的编码规则排列,用以表达一定的字符、数字及符号组成的信息内容的图形标识符。常见的条形码是由反射率相差很大的黑条和白条排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息。

一般情况下,条形码的组成结构如下:

·起始边界和终止边界:均为“静态区”,是没有字元也没有条纹的典型空白区。

·开始读取信号:放在条形码数据信号的第一个字元之前,它是一个空白团的特殊条形码,是用来辨别条形码数据符号的开始信号。解码器必须先辨认此字元符号确实存在,才接着处理来自读码器所得的信号,并确认此信号不是意外扫描到的不相干符号。

·数据信号:它是主要数据信息的来源,有各种不同条形码,须事先规划好各种代表码的条纹,且必须与起始及终止号码条不相同,以免机器误读而产生意外错误。

·终止字元符号:它也是一种特殊条纹与空白图案,它的目的是告知解码器该数据已经输送完毕,解码器得到这种信号后立刻停止数据的输入。此时解码器一方面会判断数据信息是否正确,若正确,则把数据输入数据库,以作进一步处理及应用;另一方面会发出一个信号或者声音告之操作员,其读码的动作正确完整,读码完成。

·“检查和”字元:当信息数据传到解码器后,接着就得到“检查和”信号。一般“检查和”字元位于数据信息码之后,终止符号码之前。系统检查解码后的结果是否正确,如果正确,即可输入系统中存储并计算。如果不正确,则输出警告信号给操作员,提示重新输入。

2.条形码的种类

条形码按码制分类可分为以下几种:

·UPC码。UPC码是一种长度固定的连续型数字式码制,其字符集为数字0~9。它采用4种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。

·EAN码。EAN码又称通用商品条形码,由国际物品编码协会制定,通用于世界各地,是目前国际上使用最广泛的一种商品条形码。EAN码与UPC码兼容,而且两者具有相同的符号体系。EAN码的字符编号结构与UPC码相同,也是长度固定的、连续型的数字式码制,其字符集是数字0~9。它采用4种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。EAN码有2种类型,即EAN-13码和EAN-8码。

·交叉25码。交叉25码是一种长度可变的连续型自校验数字式码制,其字符集为数字0~9。它采用2种元素宽度,每个条和空是宽或窄元素。编码字符个数为偶数,所有奇数位置上的数据以条编码,偶数位置上的数据以空编码。如果为奇数个数据编码,则在数据前补一位0,以使数据为偶数个位数。

·39码。39码是第一个字母数字式码制。它是长度可比的离散型自校验字母数字式码制。其字符集为数字0~9、26个大写字母和8个特殊字符(+、-、.、Space(空格符)、*、/、%、$),共44组编码。每个字符由9个元素组成,其中有5个条(2个宽条,3个窄条)和4个空(1个宽空,3个窄空)。它是一种离散码。

·库德巴码。库德巴码是一种长度可变的连续型自校验数字式码制。其字符集为数字0~9和6个特殊字符(-、:、/、.、+、¥),共16个字符。常用于仓库、血库和航空快递包裹中。

·128码。128码是一种长度可变的连续型自校验数字式码制。它采用4种元素宽度,每个字符有3个条和3个空,共11个单元元素宽度,又称(113)码。它有106个不同条形码字符,每个条形码字符有3种含义不同的字符集,分别为A、B、C。它使用这3个交替的字符集对128个ASC II码进行编码。

·93码。93码是一种长度可变的连续型字母数字式码制。其字符集由数字0~9、26个大写字母、7个特殊字符(-、.、Space(空格符)、/、+、%、¥)以及4个控制字符组成。

·49码。49码是一种多行的连续型、长度可变的字母数字式码制。采用多种元素宽度。其字符集为数字0~9、26个大写字母、7个特殊字符(-、.、Space(空格符)、/、+、%、¥)、3个功能键和3个变换字符,共49个字符。

·其他码制。除上述码外,还有其他的码制,如25码和Nixdorf码等。

按维数分类,条形码有以下几种:

·普通的一维条形码。普通的一维条形码自问世以来,很快得到了广泛的应用。但由于一维条形码的信息容量很小,如商品上的条形码仅能容13位的阿拉伯数字,更多的描述商品的信息只能依赖数据库的支持,这种条形码的应用范围因而受到一定的限制。

·二维条形码。除具有普通条形码的优点外,二维条形码还具有信息容量大、可靠性高、保密防伪性强、易于制作、成本低等优点。美国Symbol公司于1991年正式推出名为PDF417的二维条形码,即“便携式数据文件”。PDF417条形码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段。

·多维条形码。进入20世纪80年代以来,人们围绕如何提高条形码符号的信息密度,进行了大量的研究工作。多维条形码和集装箱条形码成为研究和应用的方向。128码和93码就是人们为提高信息密度而进行的成功的尝试。

3.EAN-13码的构造

EAN(European Article Number,欧洲物品编码),其中共计13位代码的EAN-13是比较通用的一般终端产品的条形码协议和标准,主要应用于超级市场和其他零售业。这也是我们比较常见的,随便拿起身边的一个从超市买来的商品都可以从包装上看得到。代码的前3位是国家代码,中间4位是生产商代码,后5位是产品代码,最后一位是自动生成的校验码。比如中华人民共和国可用的国家代码有690、691和692。

如图3-1所示,EAN-13商品条形码是表示EAN/UCC-13商品标识代码的条形码符号,由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区及供人识读字符组成。

图3-1 EAN-13条形码符号结构

左侧空白区:位于条形码符号最左侧与空的反射率相同的区域,其最小宽度为11个模块宽。

起始符:位于条形码符号左侧空白区的右侧,表示信息开始的特殊符号,由3个模块组成。

左侧数据符:位于起始符右侧,表示6位数字信息的一组条形码字符,由42个模块组成。

中间分隔符:位于左侧数据符的右侧,是平分条形码字符的特殊符号,由5个模块组成。

右侧数据符:位于中间分隔符右侧,表示5位数字信息的一组条形码字符,由35个模块组成。

校验符:位于右侧数据符的右侧,表示校验码的条形码字符,由7个模块组成。

终止符:位于条形码符号校验符的右侧,表示信息结束的特殊符号,由3个模块组成。

右侧空白区:位于条形码符号最右侧的与空的反射率相同的区域,其最小宽度为7个模块宽。

为保护右侧空白区的宽度,可在条形码符号右下角加“>”符号,如图3-2所示。

图3-2 EAN-13右侧空白区“>”置

供人识读字符:位于条形码符号的下方,是与条形码字符相对应的供人识读的13位数字,最左边一位称前置码。供人识读字符优先选用OCR-B字符集,字符顶部和条形码底部的最小距离为0.5个模块宽。标准版商品条形码中的前置码印制在条形码符号起始符的左侧。

根据表3-1所示可以计算出EAN-13码共有3+6×4+5+6×4+3=59个“条”和“空”。

表3-1 EAN-13编码规则一

表3-1所示左侧数字编码方式有两种,数字是按Odd Parity(A)编码还是按Even Parity(B)编码,取决于左边的第一位系统码,如表3-2所示。

表3-2 EAN编码规则二

设条形码中数字码的任一位数为Xi(i=1,2,…,13),则EAN-13条形码的校验码验算的步骤如下:

(a)以未知校验位为第一位,由右至左将各位数据顺序排队(包括校验码)。

(b)由第2位开始,求出所有偶数位数据之和,然后将和乘以3,得积N1

(c)由第3位开始,求出所有奇数位数据之和,得N2

(d)将N1N2相加得和N3

(e)用N3除以10,求得余数,并以10为模,取余数的补码,即得到校验位数值C