1. EAN-13条码结构说明
EAN-13条码长度为13位,如下图所示,代码为“6902018994262”。
其最左位“6”为前置码。
最右侧“2”为校验码,校验码“2”是可以通过“690201899426”这12位数字计算得到。如果计算结果不等于2,则表明代码错误。
本文介绍该校验码的计算方法。
2. 条码说明代码位置序号
代码位置序号
代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)。
3. 计算步骤
校验码的计算步骤如下:
a. 从代码位置序号2开始,所有偶数位的数字代码求和。
b. 将步骤a的和乘以3。
c. 从代码位置序号3开始,所有奇数位的数字代码求和。
d. 将步骤b与步骤c的结果相加。
e. 用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验码的值。
示例:代码690123456789X校验码的计算见表1。
表1 校验码的计算方法
4. 计算示例
条码“6 9 0 1 2 3 4 5 6 7 8 9 X”,其中“X”表示校验码数据未知。计算该EAN-13条码的校验码。
(1)将此13位数从右到左顺序编号,校验字符在第一位;
(2)计算从序号2开始偶数位之和a=9+7+5+3+1+9=34
(3) 34*3=102
(4) 计算从序号3开始奇数位之和b=8+6+4+2+0+6=26
(5) c=102+26=128
(6) c的个位是8,10-8=2 所以校验位为2
因此:完整的EAN13:6901234567892
5. Python代码示例
# -*- coding: utf-8 -*-
"""
条形码校验码计算,条形码校验
"""
def barcodeVerify(bc):
if len(str(bc)) == 12:
sc= str(bc)
a= int(sc[0])+int(sc[2])+int(sc[4])+int(sc[6])+int(sc[8])+int(sc[10])
b= int(sc[1])+int(sc[3])+int(sc[5])+int(sc[7])+int(sc[9])+int(sc[11])
c= a+ b*3
jym = 10-c%10
print('代码为',bc,"的条码校验码为:",jym)
elif len(str(bc)) == 13:
sc= str(bc)
a= int(sc[0])+int(sc[2])+int(sc[4])+int(sc[6])+int(sc[8])+int(sc[10])
b= int(sc[1])+int(sc[3])+int(sc[5])+int(sc[7])+int(sc[9])+int(sc[11])
c= a+ b*3
jym = 10-c%10
ojym = int(sc[12])
if ojym==jym:
print('代码为',bc,"的条码校验码为:",jym,",校验通过!")
else:
print('代码为',bc,"的条码校验码为:",jym,",校验不通过!")
else:
print("输入代码非法,请输入长度为12-13位的整数!")
for i in [6901234567893,323123,690123456789,6901234567892,9787302508502,9787302508508,1221]:
barcodeVerify(i)
运行结果:
代码为 6901234567893 的条码校验码为: 2 ,校验不通过!
输入代码非法,请输入长度为12-13位的整数!
代码为 690123456789 的条码校验码为: 2
代码为 6901234567892 的条码校验码为: 2 ,校验通过!
代码为 9787302508502 的条码校验码为: 2 ,校验通过!
代码为 9787302508508 的条码校验码为: 2 ,校验不通过!
输入代码非法,请输入长度为12-13位的整数!