条码code128编码规则
条码code128编码规则
Code128简介:
Code128码于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编码表:
1 / 8
2 / 8
3 / 8
4 / 8
5 / 8
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 ),即:
bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbs bbbssbssbbsssbbbsbsbb 。若要打印,只需将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位数据加入到检验位的计算。 各种方式的编码结果罗列如下:
6 / 8
7 / 8
结合CODE128 A、B 、C ,可以生成最优化的编码,即正确编码的同时使条码长度最短,这也是很多条码打印软件支持的,称为CODE128Auto ,具体做法是在编码中加入编码控制符,切换编码方式。同上例95270078 字符个数为偶数,采用codec 最优,编码方式为StartC + 95 + 27 + 00 + 78 + 校验 + stop ,如果字符再增加一位,假设是952700780,可以修改为StartC + 95 + 27 + 00 + 78 +codeB + 0 + 校验 + stop
8 / 8