專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

條形碼編碼之Code128、EAN128

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年11月22日   【字體:

 Code128碼于1981年推出,是一種長(zhǎng)度可變、連續(xù)性的字母數(shù)字條碼。與其他一維條碼比較起來(lái),相對(duì)較為復(fù)雜,支持的字元也相對(duì)較多,又有不同的編碼方式可供交互運(yùn)用,因此其應(yīng)用彈性也較大。

Code128特性

1、具有A、B、C三種不同的編碼類型,可提供標(biāo)準(zhǔn)ASCII中128個(gè)字元的編碼使用;

2、允許雙向掃描;

3、可自行決定是否加上檢驗(yàn)位;

4、條碼長(zhǎng)度可調(diào),但包括開始位和結(jié)束位在內(nèi),不可超過232個(gè)字元;

5、同一個(gè)128碼,可以由A、B、C三種不同編碼規(guī)則互換,既可擴(kuò)大字元選擇的范圍,也可縮短編碼的長(zhǎng)度。

Code128各編碼方式的編碼范圍

1、Code128A:標(biāo)準(zhǔn)數(shù)字和字母,控制符,特殊字符;

2、Code128B:標(biāo)準(zhǔn)數(shù)字和字母,小寫字母,特殊字符;

3、Code128C/EAN128:[00]-[99]的數(shù)字對(duì)集合,共100個(gè),即只能表示偶數(shù)位長(zhǎng)度的數(shù)字。

Code128編碼規(guī)則:開始位 + [FNC1(為EAN128碼時(shí)加)] + 數(shù)據(jù)位 + 檢驗(yàn)位 + 結(jié)束位

Code128檢驗(yàn)位計(jì)算:(開始位對(duì)應(yīng)的ID值 + 每位數(shù)據(jù)在整個(gè)數(shù)據(jù)中的位置×每位數(shù)據(jù)對(duì)應(yīng)的ID值)% 103

Code128編碼表

 

ID Code128A Code128B Code128C BandCode 編碼值
0 SP  SP 0 212222 bbsbbssbbss
1 ! ! 1 222122 bbssbbsbbss
2 " " 2 222221 bbssbbssbbs
3 # # 3 121223 bssbssbbsss
4 $ $ 4 121322 bssbsssbbss
5 % % 5 131222 bsssbssbbss
6 & & 6 122213 bssbbssbsss
7 ' ' 7 122312 bssbbsssbss
8 ( ( 8 132212 bsssbbssbss
9 ) ) 9 221213 bbssbssbsss
10 * * 10 221312 bbssbsssbss
11 + + 11 231212 bbsssbssbss
12 , , 12 112232 bsbbssbbbss
13 - - 13 122132 bssbbsbbbss
14 . . 14 122231 bssbbssbbbs
15 / / 15 113222 bsbbbssbbss
16 0 0 16 123122 bssbbbsbbss
17 1 1 17 123221 bssbbbssbbs
18 2 2 18 223211 bbssbbbssbs
19 3 3 19 221132 bbssbsbbbss
20 4 4 20 221231 bbssbssbbbs
21 5 5 21 213212 bbsbbbssbss
22 6 6 22 223112 bbssbbbsbss
23 7 7 23 312131 bbbsbbsbbbs
24 8 8 24 311222 bbbsbssbbss
25 9 9 25 321122 bbbssbsbbss
26 : : 26 321221 bbbssbssbbs
27 ; ; 27 312212 bbbsbbssbss
28 < < 28 322112 bbbssbbsbss
29 = = 29 322211 bbbssbbssbs
30 > > 30 212123 bbsbbsbbsss
31 ? ? 31 212321 bbsbbsssbbs
32 @ @ 32 232121 bbsssbbsbbs
33 A A 33 111323 bsbsssbbsss
34 B B 34 131123 bsssbsbbsss
35 C C 35 131321 bsssbsssbbs
36 D D 36 112313 bsbbsssbsss
37 E E 37 132113 bsssbbsbsss
38 F F 38 132311 bsssbbsssbs
39 G G 39 211313 bbsbsssbsss
40 H H 40 231113 bbsssbsbsss
41 I I 41 231311 bbsssbsssbs
42 J J 42 112133 bsbbsbbbsss
43 K K 43 112331 bsbbsssbbbs
44 L L 44 132131 bsssbbsbbbs
45 M M 45 113123 bsbbbsbbsss
46 N N 46 113321 bsbbbsssbbs
47 O O 47 133121 bsssbbbsbbs
48 P P 48 313121 bbbsbbbsbbs
49 Q Q 49 211331 bbsbsssbbbs
50 R R 50 231131 bbsssbsbbbs
51 S S 51 213113 bbsbbbsbsss
52 T T 52 213311 bbsbbbsssbs
53 U U 53 213131 bbsbbbsbbbs
54 V V 54 311123 bbbsbsbbsss
55 W W 55 311321 bbbsbsssbbs
56 X X 56 331121 bbbsssbsbbs
57 Y Y 57 312113 bbbsbbsbsss
58 Z Z 58 312311 bbbsbbsssbs
59 [ [ 59 332111 bbbsssbbsbs
60 \ \ 60 314111 bbbsbbbbsbs
61 ] ] 61 221411 bbssbssssbs
62 ^ ^ 62 431111 bbbbsssbsbs
63 _ _ 63 111224 bsbssbbssss
64 NUL ` 64 111422 bsbssssbbss
65 SOH a 65 121124 bssbsbbssss
66 STX b 66 121421 bssbssssbbs
67 ETX c 67 141122 bssssbsbbss
68 EOT d 68 141221 bssssbssbbs
69 ENQ e 69 112214 bsbbssbssss
70 ACK f 70 112412 bsbbssssbss
71 BEL g 71 122114 bssbbsbssss
72 BS h 72 122411 bssbbssssbs
73 HT i 73 142112 bssssbbsbss
74 LF j 74 142211 bssssbbssbs
75 VT k 75 241211 bbssssbssbs
76 FF I 76 221114 bbssbsbssss
77 CR m 77 413111 bbbbsbbbsbs
78 SO n 78 241112 bbssssbsbss
79 SI o 79 134111 bsssbbbbsbs
80 DLE p 80 111242 bsbssbbbbss
81 DC1 q 81 121142 bssbsbbbbss
82 DC2 r 82 121241 bssbssbbbbs
83 DC3 s 83 114212 bsbbbbssbss
84 DC4 t 84 124112 bssbbbbsbss
85 NAK u 85 124211 bssbbbbssbs
86 SYN v 86 411212 bbbbsbssbss
87 ETB w 87 421112 bbbbssbsbss
88 CAN x 88 421211 bbbbssbssbs
89 EM y 89 212141 bbsbbsbbbbs
90 SUB z 90 214121 bbsbbbbsbbs
91 ESC { 91 412121 bbbbsbbsbbs
92 FS | 92 111143 bsbsbbbbsss
93 GS } 93 111341 bsbsssbbbbs
94 RS ~ 94 131141 bsssbsbbbbs
95 US DEL 95 114113 bsbbbbsbsss
96 FNC3 FNC3 96 114311 bsbbbbsssbs
97 FNC2 FNC2 97 411113 bbbbsbsbsss
98 SHIFT SHIFT 98 411311 bbbbsbsssbs
99 CODEC CODEC 99 113141 bsbbbsbbbbs
100 CODEB FNC4 CODEB 114131 bsbbbbsbbbs
101 FNC4 CODEA CODEA 311141 bbbsbsbbbbs
102 FNC1 FNC1 FNC1 411131 bbbbsbsbbbs
103 StartA StartA StartA 211412 bbsbssssbss
104 StartB StartB StartB 211214 bbsbssbssss
105 StartC StartC StartC 211232 bbsbssbbbss
106 Stop Stop Stop 2331112 bbsssbbbsbsbb




Code128編碼示例
:以 95270078 為例

Code128A, 開始位對(duì)應(yīng)的ID為103,第1位數(shù)據(jù)9對(duì)應(yīng)的ID為25,第2位數(shù)據(jù)5對(duì)應(yīng)的ID為21,依此類推,可以計(jì)算檢驗(yàn)位 = (103 + 1*25 + 2*21 + 3*18 + 4*23 + 5*16 + 6*16 + 7*23 + 8*24) % 103 = 21,即檢驗(yàn)位的ID為21。

對(duì)照編碼表,95270078 編碼表示為:開始位StartA(bbsbssssbss)+ 數(shù)據(jù)位[9(bbbssbsbbss)+  5(bbsbbbssbss)+ 2(bbssbbbssbs)+ 7(bbbsbbsbbbs)+  0(bssbbbsbbss)+ 0(bssbbbsbbss)+  7(bbbsbbsbbbs)+ 8(bbbsbssbbss)]+  檢驗(yàn)位21(bbsbbbssbss)+  結(jié)束位Stop(bbsssbbbsbsbb), 即:bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbsbbbssbssbbsssbbbsbsbb。 若要打印,只需將b用黑色線標(biāo)出,s用白色線標(biāo)出,一個(gè)簡(jiǎn)單的條形碼生成程序就完成了!

128B 與128A類似,128C只能對(duì)長(zhǎng)度為偶數(shù)的數(shù)字串編碼,每?jī)蓚(gè)數(shù)字為一位,所以輸出的信息壓縮了一半,打印的條形碼因此也就較短。接上例,第1位數(shù)據(jù) 95對(duì)應(yīng)ID為95,第2位數(shù)據(jù)27對(duì)應(yīng)ID為27,第3位數(shù)據(jù)00對(duì)應(yīng)ID為0,第4位數(shù)據(jù)78對(duì)應(yīng)ID為78,所以檢驗(yàn)位 = (105 + 1*95 + 2*27 + 3*0 + 4*78) % 103 = 51

EAN128與Code128C相同,只是在開始位后加多一個(gè)控制位FNC1(ID為102),同時(shí)將FNC1做為第1位數(shù)據(jù)加入到檢驗(yàn)位的計(jì)算。

各種方式的編碼結(jié)果羅列如下:

 

 編碼方式  開始位  FNC1  數(shù)據(jù)位  檢驗(yàn)位  結(jié)束位  編碼結(jié)果
 Code128A  StartA  無(wú)  9 + 5 + 2 + 7 + 0 + 0 + 7 + 8  (103 + 1*25 + 2*21 + 3*18 + 4*23 + 5*16 + 6*16 + 7*23 + 8*24) % 103 = 21  Stop  bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbsbbbssbssbbsssbbbsbsbb
 Code128B  StartB  無(wú)  9 + 5 + 2 + 7 + 0 + 0 + 7 + 8  (104 + 1*25 + 2*21 + 3*18 + 4*23 + 5*16 + 6*16 + 7*23 + 8*24) % 103 = 22  Stop  bbsbssbssssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbssbbbsbssbbsssbbbsbsbb
 Code128C  StartC  無(wú)  95 + 27 + 00 + 78  (105 + 1*95 + 2*27 + 3*0 + 4*78) % 103 = 51  Stop  bbsbssbbbssbsbbbbsbsssbbbsbbssbssbbsbbssbbssbbssssbsbssbbsbbbsbsssbbsssbbbsbsbb
 EAN128  StartC  FNC1  95 + 27 + 00 + 78  (105 + 1*102 + 2*95 + 3*27 + 4*0 + 5*78) % 103 = 44  Stop  bbsbssbbbssbbbbsbsbbbsbsbbbbsbsssbbbsbbssbssbbsbbssbbssbbssssbsbssbsssbbsbbbsbbsssbbbsbsbb

 

 

Code 128 條碼

Code 128 編碼方式是屬於比較複雜的一種條碼,應(yīng)用起來(lái)比較有彈性,在1981年開始流行起來(lái)。

Code 128 條碼主要特性有:

1.有A,B,C三種不同的編碼型態(tài),可以提供128個(gè)標(biāo)準(zhǔn)的ASCII code字元.

   包括: 0~9的數(shù)字,英文大小寫,各種特殊符號(hào),以及控制碼。

2.有一檢查碼,可自由決定是否要列印。

3.在可藉由A、B、C三種不同編碼型態(tài)交叉使用,以縮短條碼的長(zhǎng)度。

4.可允許由左至右,或由右至左,雙向掃瞄。


Code 128 條碼基本結(jié)構(gòu)

圖一

Code 128 條碼內(nèi)容主要有四個(gè)部份:

1.起始碼 (start code)

2.資料碼 (data code)

3.結(jié)束碼 (end code)

4.檢查碼 (check code):可有可無(wú)


Code 128 條碼字元編碼方式

Code 128 每一字元條碼結(jié)構(gòu)由3條Bar及3條Space所組成.又細(xì)分為11等分,組成不同粗細(xì)比。字元最粗的線條最高可達(dá)最細(xì)的4倍。

例如:起始碼Code A

11010000100       條碼裡頭space最粗是最細(xì)線條的4倍

再舉個(gè)例子,我們以B型態(tài)中的特殊符號(hào)'/'說明

10111001100      最粗的bar是最細(xì)bar的3倍


起始碼與結(jié)束碼編碼方式

Code 128 條碼有A、B、C三種不同型態(tài)編碼的字元表,要選擇哪一種字元表取決於特殊控制碼Code A,Code B與Code C。

起始碼也有三種編碼型態(tài):Code A,Code B,Code C

當(dāng)起始碼為Code A時(shí),後面的條碼資料則選擇A型態(tài)字元表編碼邏輯。

而起始碼為Code B時(shí),後面的條碼資料則選擇B型態(tài)字元表編碼邏輯。

若全部為數(shù)字時(shí)可選擇Code C型態(tài)字元表編碼邏輯,以縮短條碼的列印長(zhǎng)度。

每一類型的字元表內(nèi)也有Code A,Code B,Code C,但條碼編碼邏輯與起始碼不同,請(qǐng)參閱【Code 128 條碼字元表】

接下來(lái)我們看三種起始碼的條碼編碼方式

Code A條碼資料為11010000100,條碼圖案為 ,相對(duì)值為103。

Code B條碼資料為11010010000,條碼圖案為 ,相對(duì)值為104。

Code C條碼資料為11010011100,條碼圖案為 ,相對(duì)值為105。

結(jié)束碼編碼方式

A,B,C三種不同型態(tài)編碼方式,結(jié)束碼均固定為1100011101011,條碼圖案為,相對(duì)值為106。


Code 128 條碼三種字元表型態(tài)編碼差異說明

1.A 型態(tài)字元表,支援的資料碼包含:標(biāo)準(zhǔn)ASCII=0 ~ ASCII=95等字元及控制碼部份,以及7個(gè)Code 128 條碼專屬字元,共計(jì)103個(gè)字元,請(qǐng)參閱code 128 條碼字元表中的A型態(tài)。(ASCII=0~31為控制碼,ASCII=32~95為可見字元。)

2.B型態(tài)字元表包含:標(biāo)準(zhǔn)ASCII=32 ~ ASCII=127等字元,以及7個(gè)Code 128 條碼專屬字元,共計(jì)103個(gè)字元,請(qǐng)參閱code 128 條碼字元表中的B型態(tài)。

3.C型態(tài)字元表主要支援?dāng)?shù)字00~99的編碼使用,若使用長(zhǎng)數(shù)字的資料時(shí),可以用C型態(tài)編碼,可縮短條碼列印的長(zhǎng)度。數(shù)字00~99加上3個(gè)特殊控制字元,總共103個(gè)字元。

特殊控制字元說明

1.Code A:表示後面的字元編碼型態(tài)要使用A table。

2.Code B:表示後面的字元編碼型態(tài)要使用B table。

3.Code C:表示後面的字元編碼型態(tài)要使用C table。

4.Shift:等於Shift鍵的作用。

5.FNC 1:等於F1鍵的作用。

6.FNC 2:等於F2鍵的作用。

7.FNC 3:等於F3鍵的作用。

8.FNC 3:等於F4鍵的作用。


Code 128 條碼應(yīng)用實(shí)例說明

1.Code C型態(tài)應(yīng)用時(shí)機(jī)

我們舉以下例子,如果資料內(nèi)如為數(shù)字0123456789,使用Code A及Code C條碼列印長(zhǎng)度的差異,Code C條碼列印出來(lái)的長(zhǎng)度較短。

Code A型態(tài)時(shí)的編碼如下圖

 

 

Code C型態(tài)時(shí)的編碼如下圖

 

 

2.Code A及Code C型態(tài)混合應(yīng)用時(shí)機(jī)

 

前面4個(gè)字元ABCB使用A table編碼,所以起始碼以Code A開始,然後在數(shù)字0123456789之前加上Code C特殊控制碼,則後面的數(shù)字會(huì)轉(zhuǎn)換成C table編碼,如此就可以縮短條碼列印的長(zhǎng)度。


Code 128 條碼檢查碼的計(jì)算方式

我們以起始碼Code B編碼的Andy’s條碼來(lái)說明

 

步驟一.計(jì)算出S值

S=103+(d1*1)+(d2*2)+ (d3*3)+ (d4*4)+ …

d1:表示資料第1個(gè)字元

因?yàn)槠鹗即a為Code B,所以字元相對(duì)值使用B table。

則S=103+(33*1)+(78*2)+(68*3)+(89*4)+(7*5)+(83*6)=103+33+156+204+356+35+498=1385

步驟二.將S值除以103,取其餘數(shù)M值。

1385/103=13…46 ?取餘數(shù)M=46

步驟三.將M值46代入B table找到相對(duì)值的字元為N,即檢查碼為N。

提醒:

若資料碼裡有Code A,Code B,Code C型態(tài)轉(zhuǎn)換,檢查碼代入的依據(jù)均以起始碼相對(duì)應(yīng)的字元組型態(tài)為主。

起始符(Unicode=00CC):ì

終止符(Unicode=00CE):Î

value95(Unicode=00C3):Ã

value96(Unicode=00C4):Ä

value97(Unicode=00C5):Å

value98(Unicode=00C6):Æ

value99(Unicode=00C7):Ç

value100(Unicode=00C8):è

value101(Unicode=00C9):é

value102(Unicode=00CA):ê
 
尼瑪,找這些確定那個(gè)起始符,終止符的ID105,106對(duì)應(yīng)的編碼含義找了半天,一開始對(duì)應(yīng)ASCII碼表查,怎么都不對(duì)

關(guān)閉窗口