CODE128不同编码方式之间的混合编码
众所周知,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;
【安全】保密,你懂的。
原创作者:豆点
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。