一维条形码生成与识别技术一、引言条形码(简称条码)技术是集条码理论、光电技术、计算机技术、通信技术、条码印制技术于一体的一种自动识别技术。
条形码是由宽度不同、反射率不同的条(黑色)和空(白色),按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符。
条形码符号也可印成其它颜色,但两种颜色对光必须有不同的反射率,保证有足够的对比度。
条码技术具有速度快、准确率高、可靠性强、寿命长、成本低廉等特点,因而广泛应用于商品流通、工业生产、图书管理、仓储标证管理、信息服务等领域。
二、EAN-13条形码简介一维条码主要有EAN和UPC两种,其中EAN码是我国主要采取的编码标准。
EAN是欧洲物品条码(European Article Number Bar Code)的英文缩写,是以消费资料为使用对象的国际统一商品代码。
只要用条形码阅读器扫描该条码,便可以了解该商品的名称、型号、规格、生产厂商、所属国家或地区等丰富信息。
EAN通用商品条码是模块组合型条码,模块是组成条码的最基本宽度单位,每个模块的宽度为毫米。
在条码符号中,表示数字的每个条码字符均由两个条和两个空组成,它是多值符号码的一种,即在一个字符中有多种宽度的条和空参与编码。
条和空分别由1~4个同一宽度的深、浅颜色的模块组成,一个模块的条表示二进制的“1”,一个模块的空表示二进制的“0”,每个条码字符共有7个模块。
即一个条码字符条空宽度之和为单位元素的7倍,每个字符含条或空个数各为2,相邻元素如果相同,则从外观上合并为一个条或空,并规定每个字符在外观上包含的条和空的个数必须各为2个,所以EAN码是一种(7,2)码。
EAN条码字符包括0~9共10个数字字符,但对应的每个数字字符有三种编码形式,左侧数据符奇排列、左侧数据符偶排列以及右侧数据符偶排列。
这样十个数字将有30种编码,数据字符的编码图案也有三十种,至于从这30个数据字符中选哪十个字符要视具体情况而定。
在这里所谓的奇或偶是指所含二进制“1”的个数为偶数或奇数[2]。
EAN-13码的格式EAN条形码有两个版本,一个是13位标准条码(EAN-13条码),另一个是8位缩短条码(EAN-8条码)。
EAN-13条码由代表13位数字码的条码符号组成,如图1所示[1]。
图 1前2位(~,欧共体12国采用)或前3位(~,其他国家采用)数字为国家或地区代码,称为前缀码或前缀号。
例如:我国为690,日本为49*,澳大利亚为93*等(其中的“*”表示0~9的任意数字)。
前缀后面的5位(~ )或4位(~ )数字为商品制造商的代码,是由该国编码管理局审查批准并登记注册的。
厂商代码后面的5位(~ )数字为商品代码或商品项目代码,用以表示具体的商品项目,即具有相同包装和价格的同一种商品。
最后一位数字为校验码,用以提高数据的可靠性和校验数据输入的正确性,校验码的数值按国际物品编码协会规定的方法计算。
EAN-13条形码的构成EAN-13条形码的构成如图2所示。
左侧空白起始符左侧数据符6位数字中间分隔符右侧数据符6位数字校验符1位数字终止符右侧空白图2 典型EAN-13条形码的构成(1)左、右侧空白:没有任何印刷符号,通常是空白,位于条码符号的两侧。
用以提示阅读,准备扫描条码符号,共有18个模块组成(其中左侧空白不得少于9个模块宽度),一般左侧空白11个模块,右侧空白7个模块。
(2)起始符:条形码符号的第一位字符是起始符,它特殊的条空结构用于识别条形码符号的开始。
由3个模块组成。
(3)左侧数据符:位于中间分隔符左侧,表示一定信息的条码字符,由42个模块组成。
(4)中间分隔符:位于条码中间位置的若干条与空,用以区分左、右侧数据符,由5个模块组成。
(5)右侧数据符:位于中间分隔符右侧,表示一定信息的条码字符,由35个模块组成。
(6)条码校验符:表示校验码的条码字符,用以校验条码符号的正确与否,由7个模块组成。
(7)终止符:条形码符号的最后一位字符是终止符,它特殊的条空结构用于识别条形码符号的结束。
由3个模块组成。
一个条形码图案是数条黑色和白色线条组成,如图3所示。
图3 条形码图案实例图案分成五个部分,从左至右分别为:起始部分、第一数据部分、中间部分、第二数据部分和结束部分。
(1)起始部分:由11条线组成,从左至右分别是8条白线,一条黑线,一条白线和一条黑线。
(2)第一数据部分:由42条线组成,是按照一定的算法形成的,包含了左侧数据符(~ )这些数字的信息。
(3)中间部分:由5条线组成,从左到右依次是白线,黑线,白线,黑线,白线。
(4)第二数据部分:由42条线组成,是按照一定的算法形成的,包含了右侧数据符(~)这些数字的信息。
(5)结尾部分:由11条线组成,从左至右分别是一条黑线,一条白线和一条黑线,8条白线。
EAN-13的编码规则EAN-13的编码是由二进制表示的。
它的数据符、起始符、终止符、中间分隔符编码见表1。
表1 EAN-13编码字符二进制表示左侧数据符右侧数据符奇性字符(A组)偶性字符(B组)偶性字符(C组)0000110101001111110010 1001100101100111100110 2001001100110111101100 3011110101000011000010 4010001100111011011100 5011000101110011001110 6010111100001011010000 7011101100010011000100 8011011100010011001000 9000101100101111110100起始符101中间分隔1010符终止符101左侧数据符有奇偶性,它的奇偶排列取决于前置符,所谓前置符是国别识别码的第一位,该位以消影的形式隐含在左侧六位字符的奇偶性排列中,这是国际物品编码标准版的突出特点。
前置符与左侧六位字符的奇偶排列组合方式的对应关系见表2,实际上由表2这种编码规定可看出,与这种组合方式是一一对应固定不变的。
例如:中国的国别识别码为“690”,因此它的前置符为“6”,左侧数据符的奇偶排列为“OEEEOO”[3],“E”表示偶字符,“O”表示奇字符。
表2 左侧数据符奇偶排列结合方式前置符左侧数据符奇、偶排列前置符左侧数据符奇、偶排列0OOOOOO5OEEOOE1OOEOEE6OEEEOO2OOEEOE7OEOEOE3OOEEEO8OEOEEO4OEOOEE9OEEOEOEAN-13条形码的校验方法校验码的主要作用是防止条形码标志因印刷质量低劣或包装运输中引起标志破损而造成扫描设备误读信息。
作为确保商品条形码识别正确性的必要手段,条形码用户在标志设计完成后,代码的正确与否直接关系到用户的自身利益。
对代码的验证,校验码的计算是标志商品质量检验的重要内容之一,应该谨慎严格,需确定代码无误后才可用于产品包装上。
下面是EAN-13条形码的校验码验算方法,步骤如下[3]:(1)以未知校验位为第1位,由右至左将各位数据顺序排队(包括校验码);(2)由第2位开始,求出偶数位数据之和,然后将和乘以3,得积;(3)由第3位开始,求出奇数位数据之和,得;(4)将和相加得和;(5)用除以10,求得余数,并以10为模,取余数的补码,即得校验位数据值;(6)比较第1位的数据值与C的大小,若相等,则译码正确,否则进行纠错处理。
例如,设EAN-13码中数字码为00578(其中校验码值为8),该条码字符校验过程为:,,=+ =82,除以10的余数为2,故,译码正确。
3 EAN-13条形码的生成条形码的生成方法如下[3]:(1)由根据表3产生和~ 匹配的字母码,该字母码有6个字母组成,字母限于A和B。
0AAAAAA5ABBAAB1AABABB6ABBBAA2AABBAB7ABABAB3AABBBA8ABABBA4ABAABB9ABBABA(20AAAAAA5ABBAAB1AABABB6ABBBAA2AABBAB7ABABAB3AABBBA8ABABBA4ABAABB9ABBABA)将~和产生的字母码按位进行搭配,来产生一个数字--字母匹配对。
并通过查表4生成条形码的第一数据部分。
表4 数字--字母映射表数字-字母匹配对二进制信息数字-字母匹配对二进制信息0A00011010B01001110C11100101A00110011B01100111C11001102A00100112B00110112C11011003A01111013B01000013C10000104A01000114B00111014C10111005A01100015B01110015C10011106A01011116B00001016C10100007A01110117B00100017C10001008A01101118B00010018C10010009A00010119B00101119C1110100(3)将~ 和C进行搭配,并通过查表4生成条形码的第二数据部分。
(4)按照两部分数据绘制条形码:1对应黑线,0对应白线。
例如,假设一个条形码的数据码为:00578。
=6,对应的字母码为ABBBAA,~和产生的字母码按位进行搭配结果为9A、0B、1B、0B、3A、8A,查表4得第一部分数据的编码分别为0001011、0100111、0110011、0100111、0111101、0110111;~ 和C进行搭配结果为1C、0C、0C、5C、7C、8C,查表4得第二部分数据的编码分别为1100110、1110010、1110010、1001110、1000100、1001000。
4 条形码识别条码识别的基本原理EAN-13是一种(7, 2)码,即每个字符的总宽度为7个模块宽,交替由两个条和两个空组成,而每个条空的宽度不超过4个模块,如图4所示。
图片看不清楚请点击这里查看原图(大图)。
图4 EAN-13条码宽度的定义图4中表示当前字符中四个相邻条、空的宽度,是一个字符的宽度,满足:, 为整数;且。
用表示当前字符单位模块的宽度,则。
令,。
由的值可以得到编码。
例如:若,且条码的排列为条—空—条—空,则可知当前字符的编码为1000100,是右侧偶字符7。
,且条码的排列为空—条—空—条,则可知当前字符的编码为0001011,是左侧偶字符9。
由于条码印刷和图像采集设备的限制,在图像采集时边缘部分还存在着半像素问题,实际扫描后得到的图像会出现一定程度的边缘模糊,尤其当条码密度较大,条空间距较小时边缘模糊更为明显。
边缘出现模糊时,将导致寻找条空边缘时产生一定偏差,当这个偏差超过半个模块宽度时,便会出现误码。
如果再考虑到流通过程中磨损、水渍浸泡等因素引起的图像缺陷,在这种情况下如果用边缘检测的方法确定条空序列会大大降低条码的识别率。