条形码EAN-13码和EAN-8码的原理

本文介绍了EAN-13和EAN-8条形码的结构、编码规则以及校验码计算方法。EAN-13码由13位数字组成,包括国别码、制造商代码、商品标识代码和校验码;EAN-8码由8位数字构成,分为国别码、产品代码和校验码。校验码计算涉及算术位和奇数位的加法以及模补数操作,用于确保条形码的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条形码EAN-13码简介(数字组成):

 1、EAN-13码是EAN码中的一个种,用13个字符表示信息,主要包含商品的名称、型号、生产厂商和所有国家地区信息等。

 2、EAN-13码的格式介绍('6921734944573',这里我用笔上的条形码做例子,从左到右排序)

  a.制造码('692',第1到第3位构成):

   赋码权在国际物品编码协会,如69代表中国大陆,471代表中国台湾地区,489代表香港特区,00-09代表美国、加拿大,45、49代表日本。

  b.制造商代码('1734',第4到第7位构成):

   赋码权在各个国家或地区的物品编码组织,中国由国家物品编码中心赋予制造厂商代码。

  c.商品标识代码('94457',第8到第12位构成):

   赋码权由产品生产企业自己行使,可以组成1万个不同的商品代码。

  d.校验码('3',第13位构成):

    第13位码是用来保证条形码识别的正确性,由前12位数字按照一定规则计算出来,读取出前12位按照规则计算出的值跟第13位不符合,则表示读取失败。

    

  3、EAN-13码的校验算法:

  a.这里我用一张图代表条形码的位数

    

  b.首先取算数位的相加值,再乘以3得结果N

    N = (A2 + A4 + A6 + A8 + A10 + A12) * 3

   (9 + 1 + 3 + 9 + 4 +7)* 3 = 99

  c.然后算奇数位相加的值,得M,最后一位是校验码,所以不包括它

    M = (A1 + A3 + A5 + A7 + A9 + A11)

     6 + 2 + 7 + 4 + 4 +5 = 28

  d.再然后算两位相加的结果,取结果中的个位数

    C = M + N

    99 + 28 = 127(取结果的个位数也就是7)

  e.最后用模补数得出最后的算法校验码

    10 - 7 = 3

  f.计算出的校验码跟条形码中的最后一位对比,相等则译码正确。

 

 4、EAN-13码识别原理:

 

  1.以下图表示条形码的一个字符

      

  2.C1、C2、C3、C4表示该字符中四个相邻的条(黑)、空(白)的宽度,T是一个字符的宽度(C1 + C2 + C3 + C4 = 7(模块))。

  3.用字符'S'表示一个模块的宽度,S = T / 7。

  4.用mi = Ci / S ,i = 1,2,3,4,即可得到编码。

  5.若m1 = 1,m2 = 3,m3 = 1,m4 = 2,且条码排列位:条、空、条、空,则当前字符二进制编码为1000100,是右侧偶字符‘7’。

 

EAN-8码原理:

 1、以下图为EAN-8码的结构与编码方式

    

  2、此码由8位数字组成,分为三部分

    a.国别码(前2位数字)

    b.产品代码(中间5位数字)

    c.校验码(最后1位)

  3、EAN-8码与EAN-13码的计算校验公式一样

  4、EAN-8码从空白区开始一共81个模组,每个模组长0.33mm,条码符号长度为26.73mm。

转载于:https://www.cnblogs.com/Mr-Deng/p/11497544.html

### EAN-8 条形码凹槽数字打印解决方案 在 VB.NET 中处理 EAN-8 条形码时,如果遇到凹槽数字打印问题,可以采用以下方法来确保条形码能够正确显示并打印: #### 使用第三方库 为了简化开发过程并提高可靠性,建议使用成熟的第三方条形码生成库。这些库通常已经解决了常见的兼容性渲染问题。 例如,ZXing.Net 是一个广泛使用的开源库,支持多种类型的条形码生成解析。通过 ZXING 可以轻松创建高质量的 EAN-8 图像[^1]。 ```vb.net Imports ZXing Imports ZXing.Common Dim writer As New BarcodeWriter() writer.Format = BarcodeFormat.EAN_8 writer.Options = New EncodingOptions() With { .Width = 200, .Height = 100, .Margin = 1 } ' 创建要编的数据 Dim eanData As String = "693515" Dim bitmap As Bitmap = DirectCast(writer.Write(eanData), Bitmap) ' 将图像保存到文件或直接用于打印操作 bitmap.Save("ean8.png", Imaging.ImageFormat.Png) ``` #### 自定义绘制逻辑 如果不希望依赖外部库,则可以在 GDI+ 上实现自定义绘图逻辑。这需要详细了解 EAN-8规则以及如何计算校验位。 对于给定的前七位数字 `693515` ,可以通过算法计算第八位校验,并按照标准规格手动绘制条形码图形。 ```vb.net Private Function CalculateCheckDigit(code As String) As Integer Dim sumOdd As Integer = 0, sumEven As Integer = 0 For i As Integer = code.Length - 1 To 0 Step -2 sumOdd += CInt(code(i)) Next For j As Integer = code.Length - 2 To 0 Step -2 If j >= 0 Then sumEven += CInt(code(j)) * 3 Next Return (10 - ((sumOdd + sumEven) Mod 10)) Mod 10 End Function ``` 上述函数实现了基于奇偶权重求的方法来获取最终的校验位数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值