在线生成条形码的解决方案(39码、EAN-13)
公司有个项目是使用实体刷卡的会员管理系统,并为其它系统如餐饮系统、美发厅管理系统等提供统一的会员注册与信息管理。暂定使用一维条形码卡。
一般来说,商品最常用的编码是EAN-13,而非商品(如图书馆会员卡,驾驶证条码等)一般使用39码。
39码 在线测试地址:http://xoyozo.me/Demo/Barcode/Code-39/
EAN-13 在线测试地址:http://xoyozo.me/Demo/Barcode/EAN-13/
39码
39码比较简单,条码以“*”为起始符和终止符,见下图:
它所能表示的字符包括:0~9 的数字,大写 A~Z 的英文字母,「+」,「-」,「*」,「/」,「%」,「$」,「.」,以及空格符(Space)等,共44组编码。
39码表:“0”对应白色空位,“1”对应黑色线条。
字元 逻辑型态 字元 逻辑型态 A 110101001011 N 101011010011 B 101101001011 O 110101101001 C 110110100101 P 101101101001 D 101011001011 Q 101010110011 E 110101100101 R 110101011001 F 101101100101 S 101101011001 G 101010011011 T 101011011001 H 110101001101 U 110010101011 I 101101001101 V 100110101011 J 101011001101 W 110011010101 K 110101010011 X 100101101011 L 101101010011 Y 110010110101 M 110110101001 Z 100110110101
字元 逻辑型态 字元 逻辑型态 0 101001101101 + 100101001001 1 110100101011 - 100101011011 2 101100101011 * 100101101101 3 110110010101 / 100100101001 4 101001101011 % 101001001001 5 110100110101 $ 100100100101 6 101100110101 . 110010101101 7 101001011011 空白 100110101101 8 110100101101 9 101100101101 值得注意的是,39码生成的条形中,每个码之间有一个空位,经扫描枪测试,该空位与一个单位的线条宽度相等时,能确保被正确扫描。
代码见附件
EAN-13码
EAN-13码是由13位数字构成,其中最后一位为校验码:
左侧空白区 起始符 左侧数据符 中间分隔符 右侧数据符 校验符 终止符 右测空白区 9个模块 3个模块 42个模块 5个模块 35个模块 7个模块 3个模块 9个模块 校验码计算的步骤如下: 以 234235654652 为例:
数据码 校验码 代码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1 数字码 2 3 4 2 3 5 6 5 4 6 5 2 ? 偶数位 3 + 2 + 5 + 5 + 6 + 2 奇数位 2 + 4 + 3 + 6 + 4 + 5 ① 从序号2开始,将所有偶数位的数字代码求和,得出S1; S1=3+2+5+5+6+2=23
② 从序号3开始,将所有奇数位的数字求和,得出S2; S2=2+4+3+6+4+5=24
③ S3=S1*3+S2; S3=23*3+24=93
④ C=10-(S3的个位数),得到校验码C的值。并且当S3的个位数为0时,C=0。 C=10-3=7
EAN码的编码规则:
数字符左侧数据符 右侧数据符 A B C 0 0001101 0100111 1110010 1 0011001 0110011 1100110 2 0010011 0011011 1101100 3 0111101 0100001 1000010 4 0100011 0011101 1011100 5 0110001 0111001 1001110 6 0101111 0000101 1010000 7 0111011 0010001 1000100 8 0110111 0001001 1001000 9 0001011 0010111 1110100 (关于左侧数据符,网络上的资料均显示A3及B6为6位数,经本人实践亲自查证,已修正)
起始符:101
中间分隔符:01010
终止符:101。
A、B、C中的“0”和“1”分别表示具有一个模块宽度的“空”和“条”。
因为左侧数据编码方式有两种,要按照前置码选其中一种,如表:
前置字符 左侧数据符编码规则的选择 0 A A A A A A 1 A A B A B B 2 A A B B A B 3 A A B B B A 4 A B A A B B 5 A B B A A B 6(中国) A B B B A A 7 A B A B A B 8 A B A B B A 9 A B B A B A 以 6903244981002 (心相印软抽100抽) 为例:前置码为6,编码规则为 000000000101ABBBAA01010CCCCCC101000000000再对应码表替换ABC,结果为:0000000001010001011010011101000010011011010001101000110101011101001001000110011011100101110010110110010100000000039码 在线 DEMO 及源码下载:http://xoyozo.me/Demo/Barcode/Code-39/
EAN-13 在线 DEMO 及源码下载:http://xoyozo.me/Demo/Barcode/EAN-13/