以手工绘制为示例,讲解如何制作一个Code128的条形码
制作一个或批量制作Code128条形码都非常简单,使用条形码生成工具就能轻松完成,但是如果不依赖工具而是自己制作条形码,那就需要熟悉条形码的生成原理。如果您希望了解条形码的生成原理,请看下文详解。
本文中,多零通过手工绘制一个条形码,旨在讲解条形码的生成原理。
以使用字符集A(CODE A)制作一个内容为“A-123”的条形码为示例,
分两部分完成,第一部分是整理所有字符的编码信息,第二部分是根据字符编码信息绘制条形码。
第一部分,整理所有字符的编码信息
1,找出“A-123”的字符编码
Code128定义了一个字符集,共107个字符或符号,每个字符或符号都对应着Code128的编码。需要先把字符编码查找出来,再根据编码制作条形码。
一个条形码除了自己身的字符以外,额外还需要增加3个符号,分别是【开始符】、【校验码】、【终止符】,其排序是【开始符】放在第一位,最后两位是【校验码】、【终止符】,中间是条形码的实际内容的字符。
因此,这个示例中,整个条形码字符排序是【开始符】、【A】、【-】、【1】、【2】、【3】、【校验码】、【终止符】。
对于【开始符】、【终止符】可以查Code128的字符集表获得,【校验码】则需要通过计算获到。
示例中的条形码内容为“A-123”,其编码查找如下图:(对于如何获取Code128字符对照表,文章结尾会给出方法。)
Code128标准中,一共有3种字符集(CODE A/B/C),且规定每个条形码均放置【开始符】在第1位,其作用是指明条形码使用哪一种字符集。
由于本示例使用字符集A生成条形码,因此找出字符集A(CODE A)的【开始符】编码如下图。
摘抄以上找出的字符信息的【序号】和【模块数】(也即是【编码】),汇总后,字符信息如下表:
字符 | 序号 | 编码 |
Start A | 103 | 211412 |
A | 33 | 111323 |
- | 13 | 122132 |
1 | 17 | 123221 |
2 | 18 | 223211 |
3 | 19 | 221132 |
校验码 | 待计算 | 待计算 |
终止符 | 无 | 2331112 |
上面表格中,【序号】用于计算校验码,【编码】用于定位黑纹和白纹的位置和宽度大小,每一个编码共6个数字,每1个数字表示1条条纹,总是以黑纹开始,白纹结束(除终止符外),并且黑纹与白纹相隔出现。
最后一行是【终止符】,由于它不参与校验码生成,因此是没有序号的,其编码固定是2331112,共7位数字,也就只有【终止符】是7位数,其他字符均是6位数,并且每个Code128条形码都需要以【终止符】为结束标志。
2,计算校验码
详细的Code128校验码计算方法,可参考【如何计算Code128校验码】。
校验码的计算,是使用以上收集到的编码信息中【序号】数值来计算的。
这个例子中,校验码计算公式如下:
((开始符的序号×1)+(A的序号×1)+(-的序号×1)+(1的序号×2)+(2的序号×3)+(3的序号×4)) mod 103 。
即是,(103×1)+(33×1)+(13×2)+(17×3)+(18×4)+(19×5)=380,380除以103,其余数是71,即校验码是71,71在字符集中的编码是122114。
汇总后,字符的编码信息如下表:
字符 | 序号 | 编码 |
Start A | 103 | 211412 |
A | 33 | 111323 |
- | 13 | 122132 |
1 | 17 | 123221 |
2 | 18 | 223211 |
3 | 19 | 221132 |
校验码 | 71 | 122114 |
终止符 | 无 | 2331112 |
第二部分,绘制条形码
3,绘制条形码的整体框架
绘制条形码主要是使用到字符信息中的【编码】数据。
以上表格的数据,每个字符的编码有6个数字,这6个数字相加的和都是11。6和11这两个数字,对应条形码的绘制是每个字符共有6条条纹(1个数字代表1个条纹),这6条条纹总的单位宽度是11,即是【6块11条】的意思。
还有一些规律,Code128条形码的条纹最小是1个单位宽度,最大是4个单位宽度;每个字符的总有6条条纹,总是以黑纹开始,白纹结束。
但是,只有【终止符】比较特殊,有7个数字共13个单位宽度,原因是整个条形码需要以黑纹结束,如果依然使用6个数字就只能是白纹结束,因此,在标准规范中终止符增加多1个数字。
由上面的内容,可计算得这个条形码共有90个单位宽度,即(11×7)+13=90,多零以2cm为1个单位宽度,即绘制的总宽度是180cm 。
为了方便绘制条纹,下图已标注出90个单位宽度的刻度,每个单位宽度2cm ,图示如下。
每个字符需要11个单位宽度,最后一位终止符需要13个单位宽度,
整个条形码字符排序是【开始符】、【A】、【-】、【1】、【2】、【3】、【校验码】、【终止符】,下面图示标出每个字符在条形码中的位置。
以上图示,就是本例条形码中,字符对应的位置和大小,单位宽度不一定是2cm,可以根据您的需要设定,下面开始为每个字符绘制黑纹和白纹。
4,根据字符的编码,绘制每一个字符的黑纹与白纹
上面整理汇总的字符编码中,第一个字符是【开始符】,其编码是【211412】共6位数,意思是共有6条条纹,每个数字表示条纹的宽度,即是第1条条纹单位宽度是2,第2条条纹是1,第3条条纹是1,第4条条纹是4...依此类推。每条黑纹和白纹相隔出现。
则【开始符】的条纹绘制如下图。
接着是第2个字符【A】,其编码是【111323】,则字符【A】的条纹绘制如下图。
每个字符均按照以上步骤绘制条纹,按照字符的【编码】数据,整体的条纹大小分布如下图。
最后,为黑纹填充黑色即可。整个条形码,黑纹与白纹是相隔出现的,每个字符均是以黑纹开始,以白纹结束,最后终止符是7条条纹,因此终止符是黑纹结束。
本示例中完整的效果图如下。
对照使用工具生成的同样的条形码,如下图。
上图条形码编辑工具来源于批量条形码生成器,无须任何安装,点击即可在线使用。
以上就是Code128条形码生成原理,绘制条形码并不难,难在第一部分的编码信息整理,需要对照查表和计算校验码,一旦出错那怕是1个数字,都会全功尽弃,所以多零不建议人工制作条形码,实际上也不需要人工制作,使用条形码工具会更准确、更轻松。
----------------------------
Code128条码字符集哪里获取?
Code128校验码的计算过程中,查询Code128字符集表是关键步骤之一,那么,如何获取到Code128字符集对照表?
网络搜索即可找到很多Code128字符集的相关信息。如果希望获取正式的官方文档,可以查找国际标准【ISO/IEC 15417:2007】、以及国内标准【GB/T 18347-2001】和【GB/T 15425-2014】的文档,里面都有完整的Code128字符集对照表。
参考资料:
GB/T 18347-2001:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=0BCD55B8A55B2922C0FFD40FEE3CDD79
GB/T 15425-2014:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=AF88702439737AB50E248CC1A6B706C2
---------------
了解更多: 如何解析读取Code128条形码的内容? 如何计算条形码Code128校验码 为什么条形码Code128终止符是7位数字