生成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