Code128簡介:
Code128碼是由Computer Identics Corporation(美國)在1981年研制的,是一種長度可變、連續性的字母數字條碼。與其他一維條碼比較起來,相對較為復雜,支持的字元也相對較多,又有不同的編碼方式可供交互運用,因此其應用彈性也較大。
Code128特性:
1、具有A、B、C三種不同的編碼類型,可提供標準ASCII中128個字元的編碼使用;
2、允許雙向掃描;
3、可自行決定是否加上檢驗位;
4、條碼長度可調,但包括開始位和結束位在內,不可超過232個字元;
5、同一個128碼,可以由A、B、C三種不同編碼規則互換,既可擴大字元選擇的范圍,也可縮短編碼的長度。
Code128各編碼方式的編碼范圍:
1、Code128A:標準數字和字母,控制符,特殊字符;
2、Code128B:標準數字和字母,小寫字母,特殊字符;
3、Code128C/EAN128:[00]-[99]的數字對集合,共100個,即只能表示偶數位長度的數字。
Code128編碼規則:
開始位 + [FNC1(為EAN128碼時加)] + 數據位 + 檢驗位 + 結束位
Code128檢驗位計算:
(開始位對應的ID值 + 每位數據在整個數據中的位置×每位數據對應的ID值)% 103
Code128編碼表:
Code128編碼示例:以 95270078 為例:
Code128A,開始位對應的ID為103,第1位數據9對應的ID為25,第2位數據5對應的ID為21,依此類推,可以計算檢驗位 = (103 + 1*25 + 2*21 + 3*18 + 4*23 + 5*16 + 6*16 + 7*23 + 8*24) % 103 = 21,即檢驗位的ID為21。
對照編碼表,95270078 編碼表示為:開始位StartA(bbsbssssbss)+ 數據位[9(bbbssbsbbss)+ 5(bbsbbbssbss)+ 2(bbssbbbssbs)+ 7(bbbsbbsbbbs)+ 0(bssbbbsbbss)+ 0(bssbbbsbbss)+ 7(bbbsbbsbbbs)+ 8(bbbsbssbbss)]+ 檢驗位21(bbsbbbssbss)+ 結束位Stop(bbsssbbbsbsbb),即:
bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbsbbbssbssbbsssbbbsbsbb。若要打印,只需將b用黑色線標出,s用白色線標出,一個簡單的條形碼生成程序就完成了!
128B與128A類似,128C只能對長度為偶數的數字串編碼,每兩個數字為一位,所以輸出的信息壓縮了一半,打印的條形碼因此也就較短。接上例,第1位數據95對應ID為95,第2位數據27對應ID為27,第3位數據00對應ID為0,第4位數據78對應ID為78,所以檢驗位 = (105 + 1*95 + 2*27 + 3*0 + 4*78) % 103 = 51
EAN128與Code128C相同,只是在開始位后加多一個控制位FNC1(ID為102),同時將FNC1做為第1位數據加入到檢驗位的計算。
各種方式的編碼結果羅列如下:
結合Code128 A、B、C,可以生成最優化的編碼,即正確編碼的同時使條碼長度最短,這也是很多條碼打印軟件支持的,稱為Code128Auto,具體做法是在編碼中加入編碼控制符,切換編碼方式。同上例 95270078 字符個數為偶數,采用 CodeC 最優,編碼方式 為 StartC + 95 + 27 + 00 + 78 + 校驗 + stop,如果字符再增加一位,假設是 952700780,可以修改為 StartC + 95 + 27 + 00 + 78 +CodeB + 0 + 校驗 + stop。