EAN/UCC-13的代码结构
厂商识别代码 商品项目代码 校验位
厂商识别代码 商品项目代码 校验位
A、厂商识别代码 由中国物品编码中心统一向申请厂商分配。厂商识别代码左起三位是国际物品编码协会分配给中国物品编码中心的前缀码。
B、商品项目代码 由厂商根据有关规定自行分配。
C、校验位 用来校验其他代码编码的正误。计算方法见GB 12904。
二、条形码分类
1、 按码制分类
1) UPC码
1973年,美国率先在国内的商业系统中应用于UPC码之后加拿大也在商业系统中采用UPC码。UPC码是一种长度固定的连续型数字式码制,其字符集为数字0~9。它采用四种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。IPC码有两种类型,即UPC-A码和UPC-E码。
2) EAN码
1977年,欧洲经济共同体各国按照UPC码的标准制定了欧洲物品编码EAN码,与UPC码兼容,而且两者具有相同的符号体系。EAN码的字符编号结构与UPC码相同,也是长度固定的、连续型的数字式码制,其字符集是数字0~9。它采用四种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。EAN码有两种类型,即EAN-13码和EAN-8码。
3)交叉25码
交叉25码是一种长度可变的连续型自校验数字式码制,其字符集为数字0~9。采用两种元素宽度,每个条和空是宽或窄元素。编码字符个数为偶数,所有奇数位置上的数据以条编码,偶数位置上的数据以空编码。如果为奇数个数据编码,则在数据前补一位0,以使数据为偶数个数位。
4)39码
39码是第一个字母数字式码制。1974年由Intermec公司推出。它是长度可比的离散型自校险字母数字式码制。其字符集为数字0—9,26个大写字母和7特殊字符(-、。、Space、/、%、¥),共43个字符。每个字符由9个元素组成,其中有5个条(2个宽条,3个窄条)和4个空(1个宽空,3个窄空),是一种离散码。
5)库德巴码
库德巴码(Code Bar)出现于1972年,是一种长度可变的连续型自校验数字式码制。其字符集为数字0—9和6个特殊字符(-、:、/、。、+、¥),共16个字符。常用于仓库、血库和航空快递包裹中。
6)128码
128码出现于1981年,是一种长度可变的连续型自校验数字式码制。它采用四种元素宽度,每个字符由3个条和3个空,共11个单元元素宽度,又称(11,3)码。它由106个不,同条形码字符,每个条形码字符有三种含义不同的字符集,分别为A、B、C。它使用这3个交替的字符集可将128个ASCII码编码。
7)93码
93码是一种长度可变的连续型字母数字式码制。其字符集成为数字。0-9,26个大写字母和7个特殊字符(-、。、Space、/、+、%、¥)以及4个控制字符。每个字符由3个条和3个罕,共9个元素宽度。
8)49码
49码是一种多行的连续型、长度可变的字母数字式码制。出现于1987年,主要用于小物品标签上的符号。采用多种元素宽度。其字符集为数字0-9,26个大写字母和7个特殊字符(-、。、Space、%、/、+、%、¥)、3个功能键(F1、 陀、F3)和3个变换字符,共49个字符。
9)其他码制
除上述码外,还有其他的码制,例如25码出现于1977年,主要用于电子元器件标签;矩阵25码是11码的变形;Nixdorf码已被EAN码所取代Plessey码出现于1971年5月主要用于图书馆等。
ENA-13校验码的计算方法
- 代码位置序号
代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)。 - 计算步骤
校验码的计算步骤如下:
a.从代码位置序号2开始,所有偶数位的数字代码求和。
b.将步骤a的和乘以3。
c.从代码位置序号3开始,所有奇数位的数字代码求和。
d.将步骤b与步骤c的结果相加。
e.用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验
码的值。
示例:代码690123456789X1校验码的计算见表B.1。
表1 校验码的计算方法
步 骤
|
举 例 说 明
| ||||||||||||||||||||||||||||
1.
自右向左顺序编号
|
| ||||||||||||||||||||||||||||
2.
从序号2开始求出偶数位上数字之和①
|
9+7+5+3+1+9
=34 ①
| ||||||||||||||||||||||||||||
3. ①*3=②
|
34×3
=102 ②
| ||||||||||||||||||||||||||||
4.
从序号3开始求出奇数位上数字之和③
|
8+6+4+2+0+6
=26 ③
| ||||||||||||||||||||||||||||
5. ②+③=④
|
102+26
=128 ④
| ||||||||||||||||||||||||||||
6.
用大于或等于结果④且为10最小整数倍的数减去④,其差即为所求校验码的值
|
130
-128=2 校验码X1=2 |
*&---------------------------------------------------------------------*
*& 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(13) TYPE 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