1.CODE 128 標准
1.1 code 128碼格式:
從左起: 空白區域,起始字符(Start),數據區域(data),校驗碼(check),結束字符(Stop),空白區域。
所有字符條紋圖像都是以黑色開始,白色結束,只有結束字符例外。
1.2 起始字符:
由於128碼有三個字符集。所以有三個起始字符。
Start A : 表示后面的碼值代碼是從字符集A中值—— 全部大寫字母和標點符號和特殊符號。 Start B的值為:六個黑白粗細不一交替地表示為:{2,1,1,2,1,4} ; |
1.3 數據字符的表示
在128碼中所有數據都是形如:d1d2…di ,其中di在(1,4)之間,且1<=i<=6 ,且sum(di) =11。
即總共需要繪制成11條黑白相間的條紋。
校驗碼算法:
校驗碼=(起始字符值 +第一位數據值*1 +第二位數據值*2+ …. + 第 n 位數據*n )%103; |
1.4 結束字符:
128碼結束字符只有一個在編碼表中以Stop 來表示,數據為:{2,3,3,1,1,1,2};
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 (實際上沒空格)
3. Code 128 Barcode Table
Value | Code Set A |
Code Set B |
Code Set C |
Bar/Space Pattern B S B S B S |
---|---|---|---|---|
0 | SP | SP | 00 | 2 1 2 2 2 2 |
1 | ! | ! | 01 | 2 2 2 1 2 2 |
2 | " | " | 02 | 2 2 2 2 2 1 |
3 | # | # | 03 | 1 2 1 2 2 3 |
4 | $ | $ | 04 | 1 2 1 3 2 2 |
5 | % | % | 05 | 1 3 1 2 2 2 |
6 | & | & | 06 | 1 2 2 2 1 3 |
7 | ' | ' | 07 | 1 2 2 3 1 2 |
8 | ( | ( | 08 | 1 3 2 2 1 2 |
9 | ) | ) | 09 | 2 2 1 2 1 3 |
10 | * | * | 10 | 2 2 1 3 1 2 |
11 | + | + | 11 | 2 3 1 2 1 2 |
12 | , | , | 12 | 1 1 2 2 3 2 |
13 | - | - | 13 | 1 2 2 1 3 2 |
14 | . | . | 14 | 1 2 2 2 3 1 |
15 | / | / | 15 | 1 1 3 2 2 2 |
16 | 0 | 0 | 16 | 1 2 3 1 2 2 |
17 | 1 | 1 | 17 | 1 2 3 2 2 1 |
18 | 2 | 2 | 18 | 2 2 3 2 1 1 |
19 | 3 | 3 | 19 | 2 2 1 1 3 2 |
20 | 4 | 4 | 20 | 2 2 1 2 3 1 |
21 | 5 | 5 | 21 | 2 1 3 2 1 2 |
22 | 6 | 6 | 22 | 2 2 3 1 1 2 |
23 | 7 | 7 | 23 | 3 1 2 1 3 1 |
24 | 8 | 8 | 24 | 3 1 1 2 2 2 |
25 | 9 | 9 | 25 | 3 2 1 1 2 2 |
26 | : | : | 26 | 3 2 1 2 2 1 |
27 | ; | ; | 27 | 3 1 2 2 1 2 |
28 | < | < | 28 | 3 2 2 1 1 2 |
29 | = | = | 29 | 3 2 2 2 1 1 |
30 | > | > | 30 | 2 1 2 1 2 3 |
31 | ? | ? | 31 | 2 1 2 3 2 1 |
32 | @ | @ | 32 | 2 3 2 1 2 1 |
33 | A | A | 33 | 1 1 1 3 2 3 |
34 | B | B | 34 | 1 3 1 1 2 3 |
35 | C | C | 35 | 1 3 1 3 2 1 |
36 | D | D | 36 | 1 1 2 3 1 3 |
37 | E | E | 37 | 1 3 2 1 1 3 |
38 | F | F | 38 | 1 3 2 3 1 1 |
39 | G | G | 39 | 2 1 1 3 1 3 |
40 | H | H | 40 | 2 3 1 1 1 3 |
41 | I | I | 41 | 2 3 1 3 1 1 |
42 | J | J | 42 | 1 1 2 1 3 3 |
43 | K | K | 43 | 1 1 2 3 3 1 |
44 | L | L | 44 | 1 3 2 1 3 1 |
45 | M | M | 45 | 1 1 3 1 2 3 |
46 | N | N | 46 | 1 1 3 3 2 1 |
47 | O | O | 47 | 1 3 3 1 2 1 |
48 | P | P | 48 | 3 1 3 1 2 1 |
49 | Q | Q | 49 | 2 1 1 3 3 1 |
50 | R | R | 50 | 2 3 1 1 3 1 |
51 | S | S | 51 | 2 1 3 1 1 3 |
52 | T | T | 52 | 2 1 3 3 1 1 |
53 | U | U | 53 | 2 1 3 1 3 1 |
54 | V | V | 54 | 3 1 1 1 2 3 |
55 | W | W | 55 | 3 1 1 3 2 1 |
56 | X | X | 56 | 3 3 1 1 2 1 |
57 | Y | Y | 57 | 3 1 2 1 1 3 |
58 | Z | Z | 58 | 3 1 2 3 1 1 |
59 | [ | [ | 59 | 3 3 2 1 1 1 |
60 | \ | \ | 60 | 3 1 4 1 1 1 |
61 | ] | ] | 61 | 2 2 1 4 1 1 |
62 | ^ | ^ | 62 | 4 3 1 1 1 1 |
63 | _ | _ | 63 | 1 1 1 2 2 4 |
64 | NUL | ` | 64 | 1 1 1 4 2 2 |
65 | SOH | a | 65 | 1 2 1 1 2 4 |
66 | STX | b | 66 | 1 2 1 4 2 1 |
67 | ETX | c | 67 | 1 4 1 1 2 2 |
68 | EOT | d | 68 | 1 4 1 2 2 1 |
69 | ENQ | e | 69 | 1 1 2 2 1 4 |
70 | ACK | f | 70 | 1 1 2 4 1 2 |
71 | BEL | g | 71 | 1 2 2 1 1 4 |
72 | BS | h | 72 | 1 2 2 4 1 1 |
73 | HT | i | 73 | 1 4 2 1 1 2 |
74 | LF | j | 74 | 1 4 2 2 1 1 |
75 | VT | k | 75 | 2 4 1 2 1 1 |
76 | FF | I | 76 | 2 2 1 1 1 4 |
77 | CR | m | 77 | 4 1 3 1 1 1 |
78 | SO | n | 78 | 2 4 1 1 1 2 |
79 | SI | o | 79 | 1 3 4 1 1 1 |
80 | DLE | p | 80 | 1 1 1 2 4 2 |
81 | DC1 | q | 81 | 1 2 1 1 4 2 |
82 | DC2 | r | 82 | 1 2 1 2 4 1 |
83 | DC3 | s | 83 | 1 1 4 2 1 2 |
84 | DC4 | t | 84 | 1 2 4 1 1 2 |
85 | NAK | u | 85 | 1 2 4 2 1 1 |
86 | SYN | v | 86 | 4 1 1 2 1 2 |
87 | ETB | w | 87 | 4 2 1 1 1 2 |
88 | CAN | x | 88 | 4 2 1 2 1 1 |
89 | EM | y | 89 | 2 1 2 1 4 1 |
90 | SUB | z | 90 | 2 1 4 1 2 1 |
91 | ESC | { | 91 | 4 1 2 1 2 1 |
92 | FS | | | 92 | 1 1 1 1 4 3 |
93 | GS | } | 93 | 1 1 1 3 4 1 |
94 | RS | ~ | 94 | 1 3 1 1 4 1 |
95 | US | DEL | 95 | 1 1 4 1 1 3 |
96 | FNC 3 | FNC 3 | 96 | 1 1 4 3 1 1 |
97 | FNC 2 | FNC 2 | 97 | 4 1 1 1 1 3 |
98 | SHIFT | SHIFT | 98 | 4 1 1 3 1 1 |
99 | CODE C | CODE C | 99 | 1 1 3 1 4 1 |
100 | CODE B | FNC 4 | CODE B | 1 1 4 1 3 1 |
101 | FNC 4 | CODE A | CODE A | 3 1 1 1 4 1 |
102 | FNC 1 | FNC 1 | FNC 1 | 4 1 1 1 3 1 |
103 | Start A | Start A | Start A | 2 1 1 4 1 2 |
104 | Start B | Start B | Start B | 2 1 1 2 1 4 |
105 | Start C | Start C | Start C | 2 1 1 2 3 2 |
106 | Stop | Stop | Stop | 2 3 3 1 1 1 2 |