Python实现生成EAN-13条码并识别(一)

本文介绍了如何使用Python生成EAN-13条形码,包括条码的组成、字符集规则以及校验符的计算方法。通过将数据转化为0和1的字符串,并绘制黑白矩形,最终形成可识别的条码。同时预告了下篇将讲述如何识别已生成的条码。

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

生成EAN-13码

生成一维条码的思路较为简单,就是先将输入的数据按照相应的规则编成代码。首先我们来了解一下EAN-13条形码。

EAN-13码由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区及供人识别字符组成。

左侧空白区:位于条码符号最左侧与空的反射率相同的区域,其最小宽度为11个模块宽。
起始符:位于条码符号左侧空白区的右侧,表示信息开始的特殊符号,由3个模块组成。
左侧数据符:位于起始符右侧,表示6位数字信息的一组条码字符,由42个模块组成。
中间分隔符:位于左侧数据符的右侧,是平分条码字符的特殊符号,由5个模块组成。
右侧数据符:位于中间分隔符右侧,表示5位数字信息的一组条码字符,由35个模块组成。
校验符:位于右侧数据符的右侧,表示校验码的条码字符,由7个模块组成。
终止符:位于条码符号校验符的右侧,表示信息结束的特殊符号,由3个模块组成。
右侧空白区:位于条码符号最右侧的与空的反射率相同的区域,其最小宽度为7个模块宽。

这里的模块指的是单位长度,每一条码数据字符由2个条和2个空构成,每一条或空由1~4个模块组成,每一条码字符的总模块数为7。用二进制“1”表示条的模块,用二进制“0”表示空的模块。

数字字符及对应的子集表示
那么什么时候用A子集,什么时候用B子集呢?这都是由前置码决定的。
在这里插入图片描述
我编的EAN-13条码前缀默认为69,也就是说前缀码为6,左侧数据符对应使用的字符集为“ABBBAA”,而右侧数据符则都使用C子集。

我们都明白了数据字符应该如何表示,校验符又是啥?

校验符的作用是检验前面12个数字是否正确,在条码机每次读入数据时,都会计算一次数据符的校验并与校验符进行比对。
校验符的计算方法非常简单,从校验符(第1位)从右向左起将所有的奇数位相加得出一个数a,将所有的偶数位相加得出一个数b,然后将数b乘以3再与a相加得到数c,用10减去数c的个位数,如果结果不为10则检验符为结果本身,如果为10则检验符为0。

校验符只需要我们按照规则计算就好了,非常简单。需要注意的是校验码也被包含在位数内!!

编出来的结果就是一串由0和1组成的字符串。将结果逐个遍历,如果是1就画一个黑色的细长矩形,如果是0就画一个白色的矩形,间距调小一点就是一个能被识别的条形码啦!

关键代码如下:

#这是用来绘图的库
import matplotlib.pyplot as plt
import matplotlib.patches as patches

rule=[0,1,1,1,0,0,2,2,2,2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值