Python EAN13条形码生成器无法生成条码问题求助
EAN13条形码生成器代码错误排查与修复
代码中的核心错误
- 随机码生成逻辑混乱:原代码的for循环嵌套while循环会无限制向
codes中添加元素,导致列表长度远超预期的100个。正确逻辑应是重复生成随机码,直到收集到100个不重复的数值。 - EAN13构造参数错误:创建条形码对象时误用
"{codes}"字符串,实际需要传入当前循环的单个码值,且必须是字符串类型。另外,EAN13的最后一位是校验位,随机生成的13位数字大概率不符合校验规则,建议传入12位数字,由模块自动计算校验位。 - 条形码显示方式错误:原代码将列表当作函数调用(
barcodes(0)),正确的列表索引应为barcodes[0];直接打印EAN13对象无法显示条形码,需调用专用方法输出。
修正后的完整代码
from barcode import EAN13 from random import randint codes = [] barcodes = [] # 生成100个不重复的12位数字字符串 while len(codes) < 100: # 生成12位随机整数,范围覆盖所有12位数字 code = randint(100000000000, 999999999999) code_str = str(code) if code_str not in codes: codes.append(code_str) # 创建EAN13条形码对象(模块自动添加校验位) for code_str in codes: barcode = EAN13(code_str) barcodes.append(barcode) # 输出第一个条形码的ASCII格式 barcodes[0].print_ascii()
额外说明
- 如果需要生成图片格式的条形码,需先安装
pillow库(pip install pillow),然后调用barcode.save("barcode_filename")方法,默认会生成PNG文件。 - 若坚持使用13位数字,需确保最后一位是正确的校验位,否则
barcode模块会抛出校验错误。
内容的提问来源于stack exchange,提问作者Dante Crugnale
相关产品推荐
相关产品推荐

