物流信息技术|物联网|条形码的校验码计算方法

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位的整数!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值