How to check digit of EAN

 

EAN/UCC-13的代码结构

 

1)当前缀码为690691时,EAN/UCC-13的代码结构
 
                X13X12X11X10X9X8X7           X6X5X4X3X2            X1

                    厂商识别代码                 商品项目代码       校验位

2)当前缀码为692693时,EAN/UCC-13的代码结构:
 
              X13X12X11X10X9X8X7X6          X5X4X3X2               X1

                   厂商识别代码                 商品项目代码       校验位

 

A、厂商识别代码  由中国物品编码中心统一向申请厂商分配。厂商识别代码左起三位是国际物品编码协会分配给中国物品编码中心的前缀码。

B、商品项目代码  由厂商根据有关规定自行分配。

C、校验位  用来校验其他代码编码的正误。计算方法见GB 12904

 

二、条形码分类

1、 按码制分类

1 UPC

1973年,美国率先在国内的商业系统中应用于UPC码之后加拿大也在商业系统中采用UPC码。UPC码是一种长度固定的连续型数字式码制,其字符集为数字0~9。它采用四种元素宽度,每个条或空是1234倍单位元素宽度。IPC码有两种类型,即UPC-A码和UPC-E码。

2 EAN

1977年,欧洲经济共同体各国按照UPC码的标准制定了欧洲物品编码EAN码,与UPC码兼容,而且两者具有相同的符号体系。EAN码的字符编号结构与UPC码相同,也是长度固定的、连续型的数字式码制,其字符集是数字0~9。它采用四种元素宽度,每个条或空是1234倍单位元素宽度。EAN码有两种类型,即EAN-13码和EAN-8码。

3)交叉25

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

439

39码是第一个字母数字式码制。1974年由Intermec公司推出。它是长度可比的离散型自校险字母数字式码制。其字符集为数字0—926个大写字母和7特殊字符(-、。、Space/%、¥),共43个字符。每个字符由9个元素组成,其中有5个条(2个宽条,3个窄条)和4个空(1个宽空,3个窄空),是一种离散码。

5)库德巴码

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

6128

128码出现于1981年,是一种长度可变的连续型自校验数字式码制。它采用四种元素宽度,每个字符由3个条和3个空,共11个单元元素宽度,又称(113)码。它由106个不,同条形码字符,每个条形码字符有三种含义不同的字符集,分别为ABC。它使用这3个交替的字符集可将128ASCII码编码。

793

93码是一种长度可变的连续型字母数字式码制。其字符集成为数字。0-926个大写字母和7个特殊字符(-、。、Space/+%、¥)以及4个控制字符。每个字符由3个条和3个罕,共9个元素宽度。

849

49码是一种多行的连续型、长度可变的字母数字式码制。出现于1987年,主要用于小物品标签上的符号。采用多种元素宽度。其字符集为数字0-926个大写字母和7个特殊字符(-、。、Space%/+%、¥)、3个功能键(F1、 陀、F3)和3个变换字符,共49个字符。

9)其他码制

除上述码外,还有其他的码制,例如25码出现于1977年,主要用于电子元器件标签;矩阵25码是11码的变形;Nixdorf码已被EAN码所取代Plessey码出现于19715月主要用于图书馆等。

 

ENA-13校验码的计算方法

 

  1. 代码位置序号
    代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)。
  2. 计算步骤
    校验码的计算步骤如下:
    a.
    从代码位置序号2开始,所有偶数位的数字代码求和。
    b.
    将步骤a的和乘以3
    c.
    从代码位置序号3开始,所有奇数位的数字代码求和。
    d.
    将步骤b与步骤c的结果相加。
    e.
    用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验
    码的值。
    示例:代码690123456789X1校验码的计算见表B.1

1 校验码的计算方法

步 骤
举 例 说 明
1. 自右向左顺序编号
位置序号
13
12
11
10
9
8
7
6
5
4
3
2
1
代码
6
9
0
1
2
3
4
5
6
7
8
9
X
 
2. 从序号2开始求出偶数位上数字之和
9+7+5+3+1+934      
3. ①*3=②
34×3102        
4. 从序号3开始求出奇数位上数字之和
8+6+4+2+0+626      
5. ②+③=④
102+26128        
6. 用大于或等于结果且为10最小整数倍的数减去,其差即为所求校验码的值
1301282
校验码X12

 

附上一段ABAP 源码,最笨的方法写的.
 
*&---------------------------------------------------------------------*
*& Report  ZMM_EAN
*&
*&---------------------------------------------------------------------*
*& Check EAN Number
*&
*&---------------------------------------------------------------------*

REPORT  ZMM_EAN.

data: zc_1 type c.
data: zc_2 type c.
data: zc_3 type c.
data: zc_4 type c.
data: zc_5 type c.
data: zc_6 type c.
data: zc_7 type c.
data: zc_8 type c.
data: zc_9 type c.
data: zc_10 type c.
data: zc_11 type c.
data: zc_12 type c.
data: zc_13 type c.


data: zi_step2 type i.
data: zi_step3 type i.
data: zi_step4 type i.
data: zi_step5 type i.
data: zi_step6 type i.
data: zi_mod type i.
data: zi_div type i.
data: zi_result type i.

PARAMETERS: z_ean(13TYPE c.

START-OF-SELECTION.
  PERFORM Process_Data.

*&---------------------------------------------------------------------*
*&      Form  Process_Data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form Process_Data .
 " Step 1
  zc_1 = z_ean+12(1) .
  zc_2 = z_ean+11(1) .
  zc_3 = z_ean+10(1) .
  zc_4 = z_ean+9(1) .
  zc_5 = z_ean+8(1) .
  zc_6 = z_ean+7(1) .
  zc_7 = z_ean+6(1) .
  zc_8 = z_ean+5(1) .
  zc_9 = z_ean+4(1) .
  zc_10 = z_ean+3(1) .
  zc_11 = z_ean+2(1) .
  zc_12 = z_ean+1(1) .
  zc_13 = z_ean+0(1) .

  " step 2

  zi_step2 =   zc_2 + zc_4 + zc_6 + zc_8 + zc_10 + zc_12.

  " step 3
  zi_step3 = zi_step2 * 3.

  "Step 4
  zi_step4 =   zc_3 + zc_5 + zc_7 + zc_9 + zc_11 + zc_13.

  "Step 5

  zi_step5 = zi_step3 + zi_step4.

  zi_mod = zi_step5 mod 10.
  zi_div = zi_step5 div 10.

  if zi_mod > 0.
     zi_step6 = ( zi_div + 1 ) * 10.
  else.
     zi_step6 = zi_div * 10.
  endif.

  zi_result = zi_step6 - zi_step5.


  write'The Correct EAN is '.

  write: zc_13.
  write: zc_12.
  write: zc_11.
  write: zc_10.
  write: zc_9.
  write: zc_8.
  write: zc_7.
  write: zc_6.
  write: zc_5.
  write: zc_4.
  write: zc_3.
  write: zc_2.
  write: zi_result.


endform.
             " Process_Data
 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值