在线生成条形码的解决方案(39码、EAN-13)

本文发布于 15 年前,部分内容可能已经失去参考价值。

公司有个项目是使用实体刷卡的会员管理系统,并为其它系统如餐饮系统、美发厅管理系统等提供统一的会员注册与信息管理。暂定使用一维条形码卡。

一般来说,商品最常用的编码是EAN-13,而非商品(如图书馆会员卡,驾驶证条码等)一般使用39码。

39码 在线测试地址:http://xoyozo.net/Tools/Code39

EAN-13 在线测试地址:http://xoyozo.net/Tools/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,结果为:00000000010100010110100111010000100110110100011010001101010111010010010001100110111001011100101101100101000000000
 

 

xoyozo 15 年前
转载请注明出处
可能相关的内容