条形码识别技术_第1页
条形码识别技术_第2页
条形码识别技术_第3页
条形码识别技术_第4页
条形码识别技术_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一维条形码生成与识别技术一、引言条形码(简称条码)技术是集条码理论、光电技术、计算机技术、通信技术、条码印 制技术于一体的一种自动识别技术。 条形码是由宽度不同、 反射率不同的条 (黑色) 和空(白 色),按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符。条 形码符号也可印成其它颜色,但两种颜色对光必须有不同的反射率,保证有足够的对比度。 条码技术具有速度快、准确率高、可靠性强、寿命长、成本低廉等特点,因而广泛应用于商 品流通、工业生产、图书管理、仓储标证管理、信息服务等领域。二、 EAN-13 条形码简介一维条码主要有 EAN 和 UPC 两种, 其中 EAN 码是我国

2、主要采取的编码标准。 EAN 是 欧洲物品条码( European Article Number Bar Code)的英文缩写,是以消费资料为使用对象的国际统一商品代码。 只要用条形码阅读器扫描该条码, 便可以了解该商品的名称、 型 号、规格、生产厂商、所属国家或地区等丰富信息。EAN 通用商品条码是模块组合型条码,模块是组成条码的最基本宽度单位,每个模块的宽度为 0.33 毫米。在条码符号中,表示数字的每个条码字符均由两个条和两个空组成, 它是多值符号码的一种, 即在一个字符中有多种宽度的条和空参与编码。 条和空分别由 14 个同一宽度的深、浅颜色的模块组成,一个模块的条表示二进制的“1”

3、,一个模块的空表示二进制的 “0” ,每个条码字符共有 7 个模块。即一个条码字符条空宽度之和为单位元素 的 7 倍,每个字符含条或空个数各为 2 ,相邻元素如果相同, 则从外观上合并为一个条或空, 并规定每个字符在外观上包含的条和空的个数必须各为 2 个,所以 EAN 码是一种 (7 ,2)码。EAN 条码字符包括 09 共 10 个数字字符,但对应的每个数字字符有三种编码形式, 左侧数据符奇排列、左侧数据符偶排列以及右侧数据符偶排列。这样十个数字将有 30 种编 码,数据字符的编码图案也有三十种,至于从这 30 个数据字符中选哪十个字符要视具体情况而定。在这里所谓的奇或偶是指所含二进制1”

4、 的个数为偶数或奇数 2 。2.1 EAN-13 码的格式EAN条形码有两个版本,一个是 13位标准条码(EAN-13条码),另一个是8位缩短 条码(EAN-8条码)。EAN-13条码由代表13位数字码的条码符号组成,如图1所示。图表前2位(,欧共体12国采用)或前3位(二二,其他国家采用)数字为 国家或地区代码,称为前缀码或前缀号。例如:我国为 690,日本为49*,澳大利亚为93* 等(其中的“ * ”表示09的任意数字)。前缀后面的5位(丄'-:)或4位(1 '' 1) 数字为商品制造商的代码,是由该国编码管理局审查批准并登记注册的。厂商代码后面的5位(辽 ::)

5、数字为商品代码或商品项目代码,用以表示具体的商品项目,即具有相同包 装和价格的同一种商品。最后一位数字为校验码,用以提高数据的可靠性和校验数据输入的 正确性,校验码的数值按国际物品编码协会规定的方法计算。2.2 EAN-13条形码的构成EAN-13条形码的构成如图 2所示。左侧空白起始符左侧数据符6位数字中间 分隔符右侧数据符6位数字校验符1位数字终止符图2典型EAN-13条形码的构成(1 )左、右侧空白:没有任何印刷符号,通常是空白,位于条码符号的两侧。用以提示阅读,准备扫描条码符号,共有18个模块组成(其中左侧空白不得少于 9个模块宽度),般左侧空白11个模块,右侧空白 7个模块。(2 )

6、起始符:条形码符号的第一位字符是起始符,它特殊的条空结构用于识别条形码 符号的开始。由3个模块组成。(3) 左侧数据符:位于中间分隔符左侧,表示一定信息的条码字符,由42个模块组 成。(4) 中间分隔符:位于条码中间位置的若干条与空,用以区分左、右侧数据符,由5 个模块组成。(5) 右侧数据符:位于中间分隔符右侧,表示一定信息的条码字符,由35个模块组 成。(6) 条码校验符:表示校验码的条码字符,用以校验条码符号的正确与否,由7个模 块组成。(7)终止符:条形码符号的最后一位字符是终止符,它特殊的条空结构用于识别条形码符号的结束。由3个模块组成。一个条形码图案是数条黑色和白色线条组成,如图3

7、所示。图3条形码图案实例图案分成五个部分,从左至右分别为:起始部分、第一数据部分、中间部分、第二数 据部分和结束部分。(1) 起始部分:由11条线组成,从左至右分别是8条白线,一条黑线,一条白线和 一条黑线。(2)第一数据部分:由 42条线组成,是按照一定的算法形成的,包含了左侧数据符C- -')这些数字的信息。(3)中间部分:由5条线组成,从左到右依次是白线,黑线,白线,黑线,白线。(4)第二数据部分:由 42条线组成,是按照一定的算法形成的,包含了右侧数据符(“,;二)这些数字的信息。(5)结尾部分:由11条线组成,从左至右分别是一条黑线,一条白线和一条黑线,8条白线。2.3 EA

8、N-13的编码规则EAN-13的编码是由二进制表示的。它的数据符、起始符、终止符、中间分隔符编码见表1。表1 EAN-13 编码字符二进制表示左侧数据符右侧数据符奇性字符(A组)偶性字符(B组)偶性字符(C组)000011010100111111001010011001011001111001102001001100110111101100301111010100001100001040100011001110110111005011000101110011001110601011110000101101000070111011000100110001008011011100010011001

9、0009000101100101111110100起始符101中间分隔 符1010终止符101左侧数据符有奇偶性,它的奇偶排列取决于前置符,所谓前置符是国别识别码的第一ff位',该位以消影的形式隐含在左侧六位字符的奇偶性排列中,这是国际物品编码标准版的突出特点。前置符与左侧六位字符的奇偶排列组合方式的对应关系见表2,实际上由表2这种编码规定可看出,与这种组合方式是一一对应固定不变的。例如:中国的国别识别码为“ 690”,因此它的前置符为 “6” ,左侧数据符的奇偶排列为“OEEEOO I®,“E”表示偶字符,"O'表示奇字符。表2左侧数据符奇偶排列结合方式前

10、置符左侧数据符奇、偶排列前置符左侧数据符奇、偶排列0OOOOOO5OEEOOE1OOEOEE6OEEEOO2OOEEOE7OEOEOE3OOEEEO8OEOEEO4OEOOEE9OEEOEO2.4 EAN-13条形码的校验方法校验码的主要作用是防止条形码标志因印刷质量低劣或包装运输中引起标志破损而造成扫描设备误读信息。作为确保商品条形码识别正确性的必要手段, 条形码用户在标志设计 完成后,代码的正确与否直接关系到用户的自身利益。 对代码的验证,校验码的计算是标志 商品质量检验的重要内容之一,应该谨慎严格,需确定代码无误后才可用于产品包装上。下面是EAN-13条形码的校验码验算方法,步骤如下 3

11、:(1) 以未知校验位为第 1位,由右至左将各位数据顺序排队(包括校验码);(2) 由第2位开始,求出偶数位数据之和,然后将和乘以3,得积'I ;(3) 由第3位开始,求出奇数位数据之和,得< ;(4 )将宀和宀相加得和工;(5) 用除以10,求得余数,并以10为模,取余数的补码,即得校验位数据值(6)比较第1位的数据值与 C的大小,若相等,则译码正确,否则进行纠错处理。例如,设EAN-13码中数字码为6901038100578 (其中校验码值为 8),该条码字符校验过程为:虬卩+0+1 + 3+1+9)二63,“2二了+°+8+° + ° + 6二

12、19 ,=r +; 1 =82 , -l除以10的余数为2,故 C = 10-2 = 8 ,译码正确。3 EAN-13条形码的生成条形码的生成方法如下3:n(1 )由根据表3产生和*叫:匹配的字母码,该字母码有6个字母组成,字母限于A和B。表3映射表0AAAAAA5ABBAAB1AABABB6ABBBAA2AABBAB7ABABAB3AABBBA8ABABBA4ABAABB9ABBABA(20AAAAAA5ABBAAB1AABABB6ABBBAA2AABBAB7ABABAB3AABBBA8ABABBA4ABAABB9ABBABA)将匚八和一-产生的字母码按位进行搭配,来产生一个数字-字母匹配对

13、。并通过查表4生成条形码的第一数据部分。表4数字-字母映射表数字-字母匹配对二进制信息数字-字母匹配对二进制信息0A00011010B01001110C11100101A00110011B01100111C11001102A00100112B00110112C11011003A01111013B01000013C10000104A01000114B00111014C10111005A01100015B01110015C10011106A01011116B00001016C10100007A01110117B00100017C10001008A01101118B00010018C10010009

14、A00010119B00101119C1110100(3 )将 ;二和C进行搭配,并通过查表 4生成条形码的第二数据部分。(4) 按照两部分数据绘制条形码:1对应黑线,0对应白线。例如,假设一个条形码的数据码为:6901038100578 。也=6,对应的字母码为ABBBAA,加I 和产生的字母码按位进行搭配结果为 9A、0B、1B、0B、3A、8A, 查表4得第一部分数据的编码分别为 0001011、0100111、0110011、0100111、0111101、 0110111 ; 7-' ' 和C进行搭配结果为 1C、0C、0C、5C、7C、8C ,查表4得第二部 分数据

15、的编码分别为 1100110、1110010、1110010、1001110、1000100、1001000。4条形码识别4.1条码识别的基本原理EAN-13是一种亿2)码,即每个字符的总宽度为7个模块宽,交替由两个条和两个空组成,而每个条空的宽度不超过 4个模块,如图4所示。下一字符Ci图片看不清楚?请点击这里查看原图(大图)图4 EAN-13条码宽度的定义图4中-I'- 1表示当前字符中四个相邻条、空的宽度,是一个字符的宽度,满足:丄二''-:,为整数-'二;且 排列为条一空一条一空,则可知当前字符的编码为1000100 ,是右侧偶字符7。用' 表示

16、当前字符单位模块的宽度,则由,J- ' : I的值可以得到编码。例如:若h=THo 令朋广, 21234。 側二1陀=3躍二働4 = 2,且条码的- '-,且条码的排列为空 一条一空一条,则可知当前字符的编码为0001011,是左侧偶字符 9。由于条码印刷和图像采集设备的限制,在图像采集时边缘部分还存在着半像素问题,实际扫描后得到的图像会出现一定程度的边缘模糊,尤其当条码密度较大,条空间距较小时边缘模糊更为明显。边缘出现模糊时,将导致寻找条空边缘时产生一定偏差,当这个偏差超过半个模块宽度时, 便会出现误码。如果再考虑到流通过程中磨损、水渍浸泡等因素引起的图像缺陷,在这种情况下如

17、果用边缘检测的方法确定条空序列会大大降低条码的识别率。本文采用的方法为:以起始模块的中心为起始中心、一个单位模块宽度为间距来检测条空序列。4.2条形码扫描方向的判别为了能够正确地解译条形码,在解译条形码符号所表示的数据之前,需要先进行条形码扫描方向的判别,EAN-13的起始字符和终止字符的编码结构都是“ 101” ,只能通过它 进行码制的判别(对于多种条码识别的时候,其它码制的条码起始字符和终止字符都不是“101 ”)但是不能通过起始字符和终止字符来判别它的扫描方向。由EAN-13码的编码结构可知,它的右侧字符为全偶, 而左侧字符的奇偶顺序由前置符决定,没有全偶的,从而可以利用此原理来确定 E

18、AN-13码的扫描方向。如果扫描到的前6个字符为全偶,即为反向扫描,否则为正向扫描。4.3条形码字符的判别方法从上述条码识别原理知,它的逻辑值可以通过和单位模块比较判别。这种方法对于印刷质量很好、没有缺陷的条码很适用, 但是对于条码印刷质量存在缺陷,则不能正确地解译。因此本文提出了一种解决此类问题的较好方法,即相似边距离测量方法。图5条码字符宽度示图相似边距离就是相邻条和空的宽度之和,如图5中的的归一化值丄:和: 如下2 TIT <2,5/13 2.5/7<7;/7<3.5/74 3.5/757;/? <4.5/75Z/7>4.5/7- *i = l,233表5列

19、出了正向译码时 EAN-13条码字符值与归一化值 (码僞) 的对应关系,表6列出了反向译码时 EAN-13条码字符值与归一化值 (码僞)的对应关系,其中“ E”表示偶字符,“O'表示奇字符。(僞地)网2345E6O0E4O3O9E2 或 E8O1 或 O7E52表5 EAN-13条码字符值与归一化值的对应关系(正向译码)H123452O6EOO4E3岡3E9O2 或 O8E1 或 E7O54O9E2 或 E8O1 或 O7E55E6O0E4O3表6 EAN-13条码字符值与归一化值的对应关系(反向译码)3.,4E902 或 08E1 或 E705506E004E3表7和表8分别为正向译

20、码和反向译码时EAN-13条码编码与归一化值的对应关系。表7 EAN-13 条码编码与归一化值的对应关系(正向译码)字符值左奇字符编码左偶字符编码右偶字符编码徑僞)曲僞)0001101010011111100100011001011001111001100(5,3)(2,3)(5,3)10010011(4,4)0011011(3,4)1101100(4,4)2(3,3)(4,3)(3,3)0111101010000110000103(5,5)(2,5)(5,5)40100011(2,4)0011101(5,4)1011100(2,4)5(3,5)(4,5)(3,5)01100010111001

21、10011106(2,2)(5,2)(2,2)70101111(4,4)0000101(3,4)1010000(4,4)8(3,3)(4,3)(3,3)0111011001000110001009(4,2)(3,2)(4,2)011011100010011001000000101100101111110100表8 EAN-13条码字符值与归一化值的对应关系(反向译码)字符值左奇字符编码左偶字符编码右偶字符编码5他(爲,僞).1011000111001001001111001100110011001100110(2,3)(5,3)(2,3)11100100(3,4)1101100(4,4)001

22、1011(3,4)2(4,3)(3,3)(4,3)1011110100001001000013(2,5)(5,5)(2,5)41100010(5,4)1001110(2,4)0011101(5,4)5(4,5)(3,5)(4,5)1000110100111001110016(2,2)(2,2)(5,2)71111010(3,4)1010000(4,4)0000101(3,4)8(4,3)(3,3)(4,3)1101110100010000100019(3,2)(4,2)(3,2)111011010010000001001110100011101000010111由表58可以看出,条形码编码和归

23、一化值在多数情况下呈现一一对应的关系,只要确定了归一化值就能确定字符值,但是有四种情况例外。以正向译码为例,在表6中,左侧奇字符和右侧偶字符 1,7归一化值均为44,左侧奇字符和右侧偶字符 2, 8归一化值均为33,左侧偶字符1,7归一化值均为34,左侧偶字符2, 8归一化值均为43,这几种情况可以根据字符的条空宽度 进一步判别。表9为1728字符标准条空宽度值,其中字符上有“- 的对应条,否则对应空。表9 1728字符标准条空宽度值字符值左奇字符编码条空宽度值左偶字符编码条空宽度值右偶字符编码条空宽度值100110010110011110011020010011001101111011007

24、0111011001000110001008011011100010011001000根据表9中各字符条空宽度的特点可知:对于左侧奇字符、右侧偶字符 1和7,可通过比较-与'来判别,若 =>',则为字符1,反之为7 ;对于左侧奇字符、右侧偶字符2和8,可通过比较与-来判别,若 :>1,则为字符8,反之为2;> -,则为字符2,对于左侧偶字符1和7,可通过比较:与:来判别,若: >,则为字符7,反之为1 ;对于左侧偶字符 2和8,可通过比较 与=来判别,若 反之为8。采用相似边距离归一化的条码识别方法,当条码质量存在缺陷使得实际测量值和条码应该具有的理论值

25、有较大偏差时,仍能正确解译。例如对于左侧奇字符“0”进行译码,该字符的四个元素宽度的理论值应该是一丄- -' 一,但是由于印刷等原因的影响,实际上测量值是-一 一 一-=。如果只根据元素宽度的测量值进行译码,那么这四个元素的宽度测量值四舍五入取整后分别为3、3、1、1,从而造成译码错误。若采取相似边距离归一化的条码识别方法进行译码,此时 ',由表7知字符编码为左侧奇字符“ 0”。可见利用相似边距离归一化的条码识别方法判别字符值,可以得到比较满意 的效果。4.4纠错处理采用相似边距离归一化的译码方法能够在一定程度上消除条、空误差对译码识别的影响。当系统误差特别是条码印刷误差较大导

26、致-j改变时,译码将出错。因此译码软件的影响,实际上测量值是-一 一 一-=。如果只根据元素宽度的的影响,实际上测量值是-一 一 一-=。如果只根据元素宽度的应具有一定的纠错能力,以减少条空宽度值不精确的影响,提高条码识别率1。纠错主要从以下两方面进行:(1 )如果条码字符的在临界位置,当条或空的宽度有误差时,就会导致的影响,实际上测量值是-一 一 一-=。如果只根据元素宽度的的影响,实际上测量值是-一 一 一-=。如果只根据元素宽度的的奇偶性、字符值的改变,如果和都出错,则引起该字符值的改变,但奇偶性未或的整数值增1或减1。如果 '和中只有一个发生错误,则引起该字符变。实际情况中第一

27、种现象出现的概率比第二种情况大得多,因此本文主要对第一种情况进行纠错。由表1和表2可知,右侧字符为全偶字符排列,左侧字符有10种奇偶排列,这 11种排列构成有效的排列集合,把所译的字符串奇偶排列与有效的奇偶排列对比,判断是否为排列集合成员。若是,所译的字符串不作任何处理;若不是,所译码出错,并找出-'1或:哪个处在临界值,修改它的归一化整数值,这样可实现纠错。(2)当字符数据为2、8、1、7时,由于条码宽度不精确导致误码,即2判成8、1判成7,或反之。分析这种误码相对于校验位的差值有一定规律,因此可利用此规律进行纠 错。由EAN-13校验方法知:当偶数位上有2错译成8或1错译成7时,计

28、算得到的实译值与校验值差-8或2,反之8错译成2或7错译成1时,计算得到的实译值与校验值差8或-2 ;当奇数位上有2错译成8或1错译成7时,计算得到的实译值与校验值差-6或4,反之,8错译成2或7错译成1时,计算得到的实译值与校验值差6或-4 ;当然别的字符译错也可能出现这些差值, 但几率很小, 可以不予考虑。 这样若程序校验没通过, 可加一个 判断,根据差值判断其属于上述哪种情况,找出出错的字符并纠正。5 程序实现5.1 应用 Visual C+ 生成条形码图像5.1 1 创建工程文件( 1 )打开 VC+ 6.0 ,点击 “ File ”菜单的 “ New” 菜单项,在出现的界面中选定 “

29、 Projects 栏”,点击 “ MFC APPWizard(exe) ,”工程文件名为 Generator 。按 “ 确定 ” 按纽,进入 MFC APPWizard 。(2)在 MFC APPWizard 第一步选择 Single document 文档类型。第二步和第三步 按默认方式。 第四步中去掉 “ Docking toolbar ” 、“ Initial status bar”、“ Printing andprint preview'前面的"/,即不选该三项。然后点击"Advaneed”,在出现的界面中填写 “ File extension ” 为 “

30、 bmp”。第 五步 和第 六步 按默认 方式 。最 终生 成工程Generator 。(3)修改菜单。 增加“操作” 菜单; 删除“编辑” 菜单; 修改“帮助”菜单。参见工程文件。( 4)插入两个对话框( IDD_WELCOME 、IDD_GIVECODE )并修改这两个对话框。 参见工程文件。5.1.2 类代码编制( 1)在 Generator 工程中增加新类 CWeleomeDlg ,类型为 Generie Class 。( 2)在 Generator 工程中增加新类 CGiveCodeDlg ,类型为 Generie Class 。(3)点击 “View” 菜单的 “ClassWiza

31、rd ” 菜单项,在出现的界面中, 选择 Class Name 为“, CGeneratorView ” ,增加成员函数, Objeet Ids 、Messages 、 Member funetions 分另为:ID_EDIT_GIVE 、 COMMAND 、 OND_EDIT_GIVE : COMMAND ; ID_FILE_SAVE、 COMMAND 、 ON_ID_FILE_SAVE 。( 4 )给类 GeneratorView添加成员变量,参见源程序 Generatorview.h 。(5)打开文件 GeneratorView.h ,增加代码,参见源 程序。打开文件 Generator

32、View.cpp ,增加代码,参见源程序。( 6)点击 “View” 菜单的 “ClassWizard ” 菜单项,在出现的界面中, 选择 Class Name 为 “CWelcomeDIg,增加成员函数,Object Ids 、Messages、Member functions分别为: IDOK 、 BN_CLICKED 、 OnOK() 。( 7)点击 “ View” 菜单的 “ClassWizard ” 菜单项,在出现的界面中, 选择 Class Name 为 “CMainFrame,增加成员函数, Object Ids、Messages、Member functions 分别为: Cm

33、ainFrame 、 WM_CREATE 、 OnCreate() 。( 8)打开文件 MainFrame.cpp ,增加 “ #include "WelcomeDlg.h" ” ,输入代码, 参见源程序。( 9)打开 GeneratorView.cpp源文件,增加语句 “#include "GiveCodeDlg.h" ,#inc, lude "GiveSizeDlg.h" , #include <map> , #include <algorithm>,输入成员函数代码,参见源程序。(10 )编译、连接、运行。5.2 应用 Visual C+ 识别条形码图像5.2.1 创建工程文件( 1 )打开 VC+ 6.0 ,点击 “File ”菜单的 “New” 菜单项,在出现的界面中选定“ Projects 栏,点击 “ MFC APPWizard(exe) ,工程文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论