【重要】条形码原理39码和EAN-13码
公司有个项目是使用实体刷卡的会员管理系统,并为其它系统如餐饮系统、美发厅管理系统等提供统一的会员注册与信息管理。暂定使用一维条形码卡。
一般来说,商品最常用的编码是EAN-13,而非商品(如图书馆会员卡,驾驶证条码等)一般使用39码。
在线测试地址:http://www.toolsfamily.com/tools/barcode/
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  | 
在线DEMO:http://www.toolsfamily.com/tools/barcode/
源码下载:BarCode.rar

                
            
        
浙公网安备 33010602011771号