眾所周知,CODE128碼廣泛用於企業內部、物流系統之中,然而,對於該類條碼,卻又有着不同種類的細分(主要分為以下四種:code128A,code128B,code128C,ean128)。
主要區別如下:
code128A:標准數字和大寫字母,控制符,特殊字符
code128B:標准數字和大寫字母,小寫字母,特殊字符
code128C / ean128:[00]-[99]的數字對集合,共100個
其中,code128C / ean128 因其內部算法從而決定了只能對偶數位的數字進行編碼(兩者區別:ean128在起始位后多了一個標識位,並參與最終校驗位的計算)
所以對於編碼方式的選擇,便因使用場景不同而不同。
對於字符串,尤其是純數字的編碼,如果是偶數位,毫無疑問,選擇 code128C / ean128 便是一種最優的編碼方式,但若為奇數位,那么該如何選擇呢?
由於code128A與cede128B均為按位編碼,所以選擇這兩種自然無可厚非,可也正是因為是按位編碼,整體長度便成了該碼制的一大短板。幸運的是,在code128碼制下,是支持內部碼制混編的,也就是說,我們可以采取先使用ean128,再使用code128A的形式,將該數字串的編碼長度縮為最短。那么,該如何進行混合操作呢?
下面我們以123456789為例,進行簡單解釋:
對該字符串,我們可以將其拆分為:12,34,56,78,9 這五個部分,對於前四個,以正常的ean128對其進行編碼
起始位 | 標識符 | 字符1 | 字符2 | 字符3 | 字符4 | 特殊控制碼 | 字符5 | 校驗位 | 終止位 | |
編碼 | StartC | FNC1 | 12 | 34 | 56 | 78 | StartA | 9 | STOP |
|
ID | 105 | 102 | 12 | 34 |
56 |
78 | 101 |
25 | 76 | 106 |
經查詢編碼對照表可知各個編碼的ID如下(紅色表示)
計算校驗位(藍色表示):(105*1+102*2+12*3+34*4+56*5+78*6+101*7+25*8)%103=76
注:須將特殊控制碼一並計入計算序列,方可得到正確的校驗位!
現在所有編碼元素的id均已獲取,便可根據ID從編碼對照表中獲取對應的BandCode值,從而生成正確可識別的條碼。
其實,對於混合編碼,最重要的一點便是對於校驗位的計算,這里提到的計算方法,是經過實際測試通過並運行的。
鑄劍團隊簽名:
【總監】十二春秋之,3483099@qq.com;
【Master】戈稻不蒼,han169@126.com;
【Java開發】雨鷥,343691194@qq.com;思齊駿惠,qiangzhang1227@163.com;小王子,545106057@qq.com;巡山小鑽風,840260821@qq.com;
【VS開發】豆點,2268800211@qq.com;
【系統測試】土鏡問道,847071279@qq.com;塵子與自由,695187655@qq.com;
【大數據】沙漠綠洲,caozhipan@126.com;張三省,570417591@qq.com;
【網絡】夜孤星,11297761@qq.com;
【系統運營】三石頭,261453882@qq.com;平凡怪咖,591169003@qq.com;
【容災備份】秋天的雨,18568921@qq.com;
【安全】保密,你懂的。
原創作者:豆點
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。