CODE 128 国家标准
1. code 128码格式:
从左起: 空白区域,起始字符,数据区域,校验码,结束字符,空白区域。
所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。
2. 起始字符:
由于128码有三个字符集。所以有三个起始字符。
Start A : 表示后面的码值代码是从字符集A中值。 全部大写字母和标点符号和特殊符号。
用六个黑白粗细不一表示为:{2,1,1,4,1,2}
Start B: 表示字符集B,全部大小写字符和标点符号。数据为:{2,1,1,2,1,4}
Start C: 表示字符集C,数字00-99. 数据为:{2,1,1,2,3,2}
3. 数据字符的表示
在128码中所有数据都是有1-4的六位数组表示,总共绘制成11条黑白条纹。
校验码算法:
校验码=(起始字符值 +第一位数据值*1 +第二位数据值*2+ …. + 第 n 位数据*n )%103;
4. 结束字符:
128码结束字符只有一个在编码表中以Stop 来表示,数据为:{2,3,3,1,1,1,2};
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
图形方式输出Code128C条形码
最近的项目牵涉到一维条码打印的问题。条码的选型上倒没什么,因为要求短且仅包含数字,所以决定选用Code128C。在国外的网站上找了点资料研究了下,终于大致搞懂了Code128C的原理和实现方法。
Code128C只能编码长度是偶数的数字串,这是它的前提之一。说起来编码规则很简单,00 - 99 这100个数字每个数字都预先规定好一个条码,然后把原始的待编码字符串两位两位的读取,每个两位都从上面提到的码表中找到对应的条码,追加。
举个例子,我们要打印12345678的Code128c条码。首先打印Code128c的条码头,bbsbssbbbss。(b代表1个单位宽度的竖线,s代表1个单位宽度的空白)
然后对12345678编码。我们把它看成 12 34 56 78。12对应的条码是bsbbssbbbss,34对应的条码是bsssbsbbsss,56对应的条码是bbbsssbsbbs,78对应的条码是bbssssbsbss。按次序堆积起来就是了。
现在应该很好理解为什么C型128码可以打印的比较短,就是因为输出的信息被压缩到原来的一半。
接下来就是一个自校验码。计算方法是:(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47。再追加47对应的条码bsssbbbsbbs。
这里有个注意点是,第n组数字要乘以n。比如,12是第一组所以乘1,而34是第二组所以乘2。
最后就是终结符,固定为bbsssbbbsbsbb,也追加。
如此得出一个可以代表条形码的字符串:
bbsbssbbbss bsbbssbbbss bsssbsbbsss bbbsssbsbbs bbssssbsbss bsssbbbsbbs bbsssbbbsbsbb (实际上没空格)
也就是 StartC 12 34 56 78 47 Stop (实际上没空格)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
128码有A/B/C三种方式
A B C A B C
00 SP SP 00 11011001100
01 ! ! 01 11001101100
02 " " 02 11001100110
03 # # 03 10010011000
04 $ $ 04 10010001100
05 % % 05 10001001100
06 & & 06 10011001000
07 /' /' 07 10011000100
08 ( ( 08 10001100100
09 ) ) 09 11001001000
10 * * 10 11001000100
11 + + 11 11000100100
12 , , 12 10110011100
13 - - 13 10011011100
14 . . 14 10011001110
15 / / 15 10111001100
16 0 0 16 10011101100
17 1 1 17 10011100110
18 2 2 18 11001110010
19 3 3 19 11001011100
20 4 4 20 11001001110
21 5 5 21 11011100100
22 6 6 22 11001110100
23 7 7 23 11101101110
24 8 8 24 11101001100
25 9 9 25 11100101100
26 : : 26 11100100110
27 ; ; 27 11101100100
28 < < 28 11100110100
29 = = 29 11100110010
30 > > 30 11011011000
31 ? ? 31 11011000110
32 @ @ 32 11000110110
33 A A 33 10100011000
34 B B 34 10001011000
35 C C 35 10001000110
36 D D 36 10110001000
37 E E 37 10001101000
38 F F 38 10001100010
39 G G 39 11010001000
40 H H 40 11000101000
41 I I 41 11000100010
42 J J 42 10110111000
43 K K 43 10110001110
44 L L 44 10001101110
45 M M 45 10111011000
46 N N 46 10111000110
47 O O 47 10001110110
48 P P 48 11101110110
49 Q Q 49 11010001110
50 R R 50 11000101110
51 S S 51 11011101000
52 T T 52 11011100010
53 U U 53 11011101110
54 V V 54 11101011000
55 W W 55 11101000110
56 X X 56 11100010110
57 Y Y 57 11101101000
58 Z Z 58 11101100010
59 [ [ 59 11100011010
60 // // 60 11101111010
61 ] ] 61 11001000010
62 ^ ^ 62 11110001010
63 _ _ 63 10100110000
64 NUL ` 64 10100001100
65 SOH a 65 10010110000
66 STX b 66 10010000110
67 ETX c 67 10000101100
68 EOT d 68 10000100110
69 ENQ e 69 10110010000
70 ACK f 70 10110000100
71 BEL g 71 10011010000
72 BS h 72 10011000010
73 HT I 73 10000110100
74 LF j 74 10000110010
75 VT k 75 11000010010
76 FF l 76 11001010000
76 FF l 76 11001010000
77 CR m 77 11110111010
78 SO n 78 11000010100
79 SI o 79 10001111010
80 DLE p 80 10100111100
81 DC1 q 81 10010111100
82 DC2 r 82 10010011110
83 DC3 s 83 10111100100
84 DC4 t 84 10011110100
85 NAK u 85 10011110010
86 SYN v 86 11110100100
87 ETB w 87 11110010100
88 CAN x 88 11110010010
89 EM y 89 11011011110
90 SUB z 90 11011110110
91 ESC { 91 11110110110
92 FS | 92 10101111000
93 GS } 93 10100011110
94 RS ~ 94 10001011110
95 US DEL 95 10111101000
96 FNC3 FNC3 96 10111100010
97 FNC2 FNC2 97 11110101000
98 SHIFT SHIFT 98 11110100010
99 CodeC CodeC 99 10111011110
100 CodeB FNC4 CodeB 10111101110
101 FNC4 CodeA CodeA 11101011110
102 FNC1 FNC1 FNC1 11110101110
103 STARTA STARTA STARTA 11010000100
104 STARTB STARTB STARTB 11010010000
105 STARTC STARTC STARTC 11010011100
终止符 STOP STOP STOP 1100011101011