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

【安全】保密,你懂的。

原创作者:豆点

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2017-09-14 19:52  豆点  阅读(2212)  评论(0编辑  收藏  举报