在线生成条形码(39码、EAN-13)
公司有个项目是使用实体刷卡的会员管理系统,并为其它系统如餐饮系统、美发厅管理系统等提供统一的会员注册与信息管理。暂定使用一维条形码卡。
一般来说,商品最常用的编码是EAN-13,而非商品(如图书馆会员卡,驾驶证条码等)一般使用39码。
在线测试地址:
http://xoyozo.net/Tools/Code39
39码
39码比较简单,条码以“*”为起始符和终止符,见下图:
![](https://images.cnblogs.com/cnblogs_com/xoyozo/39-2.gif)
它所能表示的字符包括: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位数字构成,其中最后一位为校验码:
![](https://images.cnblogs.com/cnblogs_com/xoyozo/ean-130.gif)
左侧空白区 |
起始符 |
左侧数据符 |
中间分隔符 |
右侧数据符 |
校验符 |
终止符 |
右测空白区 |
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 |