近期疫情形势还是比较严峻的,在此向奋战在一线的医务工作者致敬!武汉加油,全国加油!

最近笔者接了一个项目需要生成条形码并给出配套的解码程序,研究了几个小时以后有了一定成果,记录一下@_@

Code128条码编码规则

CODE128条码应该来说是应用比较广泛的一类条码编码,由于其可以表示0~127的数据故称为Code128。事实上Code128分为3类:128A、128B、128C,其特性如下

类型 特性
Code128A 大写字符、数字、标点、控制符
Code128B 大小写字符、数字、标点
Code128C 纯数字

笔者在项目中选择了Code128A类型的编码。事实上无论是128A还是128B、128C,其编码规则都是一致的,有如下几部分

前空白 起始位 数据 校验位 结束位 后空白

以下给以详细介绍

前后空白

前后空白的规定比较松,只需最小宽度为10倍单位宽度即可,(注:单位宽度就是宽度为1的条纹宽度),当然空白越大越容易识别,对于某些识别程序而言判别机制做得较差,即使留出10倍宽度也经常无法识别,因此在工业现场或其他应用场合须做一定量的测试

起始位

起始位是条码能见部分的开始,也是区分3种编码的主要方式。

码制 起始位[黑 白 黑 白 黑 白]
Code128A 2,1,1,4,1,2
Code128B 2,1,1,2,1,4
Code128C 2,1,1,2,3,2

例如

该条码起始位为2黑、1白、1黑、4白、1黑、2白,也就是说这是一个Code128A条码。

数据

数据区较为有意思,因为其与ASCII字符集中的可见字符是一一映射的,因此似曾相识。以下给出部分

数据 [黑 白 黑 白 黑 白] Code128A Code128B Code128C
2,1,2,2,2,2 空格 00
2,2,2,1,2,2 ! 01
2,2,2,2,2,1 " 02
1,2,1,2,2,3 # 03
1,2,1,3,2,2 $ 04
1,3,1,2,2,2 % 05

我们需要注意的是,Code128A的字符集以“空格”打头,这是ASCII字符集的第一个可见字符,但是在Code128B中,该字符不是有效字符,在Code128C中代表了两位数00

因此从ASCII字符到Code128字符需要减去32

校验位

校验位采用校验和模103的方式,如下表示

C=(∑i⋅N)mod103C=(\sum i\cdot N) mod\, 103C=(∑i⋅N)mod103
其中NNN为该位数据的值,由前面介绍可知,N位其ASCII码值-32。
特别地数据头值如下

START A 103
START B 104
START C 105

例如计算Code128A型,数据位“0123”的校验码
C=[103+1×(′0′−32)+2×(′1′−32)+3×(′2′−32)+4×(′3′−32)]mod103=[103+1×(48−32)+2×(49−32)+3×(50−32)+4×(51−32)]mod103=[103+1×16+2×17+3×18+4×19]mod103=77C = [103 + 1 \times('0'-32)+2\times ('1'-32)+3\times ('2'-32)+4 \times('3'-32)]mod\,103\\=[103 + 1 \times(48-32)+2\times (49-32)+3\times (50-32)+4 \times(51-32)]mod\,103\\ =[103 + 1 \times 16+2\times 17+3\times18+4 \times19]mod\,103 = 77 C=[103+1×(′0′−32)+2×(′1′−32)+3×(′2′−32)+4×(′3′−32)]mod103=[103+1×(48−32)+2×(49−32)+3×(50−32)+4×(51−32)]mod103=[103+1×16+2×17+3×18+4×19]mod103=77
因此校验位为77

结束位

结束位是固定的

结束位 2, 3, 3, 1, 1, 1,2

这是一串7位数,这能够让最后一条为黑色

条码高度

为了保证识别效果,条码高度有一定要求,高度一般在条码总长的15%或者至少6.35mm,这个要求也比较宽松,当然随着识别距离的增加适当增加高度是有必要的。

实验结果

根据上述规则编写了一个测试代码,代码运行在STM32H750平台,使用FATFS将指定条码生成并保存为一个PDF文件,文件可以在PC上的打开查阅,结果如下。


生成的PDF使用Chrome顺利打开,条码使用手机QQ扫码识别成功。

一维条形码Code128的编码与生成相关推荐

  1. 一维条形码CODE128编码及字符集CODE A、B、C解析

    在进行一维条形码打印的编程中知道了条形码有一种类型是code128,也是比较常用的,具体的字符集有3种,分别为A.B.C,这三种的说明如下: A格式:数字.大写字母和控制字符组成的字符串,如ABC.A ...

  2. 一维条形码ean-13格式编码 最后一位校验码的生成规则 及代码

    /*** * @param code * @return 如果返回值是一个大于0的整数 如果返回-2表示所传的参数为空 ,如果返回值是-1 表示字符串中含有非数字字符*/public static i ...

  3. c语言 生成一维条形码,C# BarcodeLib。dll 生成一维码的问题

    public Image GetImage(int height,int width, BarcodeLib.TYPE type,string code)         {             ...

  4. 生成一维条形码并转换base64返回给前端展示

    项目场景: 提示:这里简述项目相关背景: 在后端随机生成一维条形码给前端展示 效果图: 引入pom <dependency><groupId>net.sf.barcode4j& ...

  5. qt barcode 生成一维条形码

    感谢博主Qt 中利用 GNU barcode 生成一维条形码_liyuanbhu的博客-CSDN博客_qt 生成条形码 提供的资料.然后自己弄了一个测试工程,包含了已经编译好的barcode库.直接调 ...

  6. 一维条形码***技术(Badbarcode)

    [转]http://future-sec.com/badbarcode.html 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec ...

  7. 一维条形码攻击技术(Badbarcode)

    [转]http://future-sec.com/badbarcode.html 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec ...

  8. 制作Code128B一维条形码的综合教程

    制作Code128B一维条形码的综合教程 Code128B的制作 Code128B条形码规则 QT中C++与QML的相互通信 Canvas画布和Flickable QT程序发布 版本信息 程序发布 C ...

  9. 电脑摄像头一维条形码matlab识别

    一维条形码现在广泛用于超市.图书馆.学校等,几乎在生活的各个领域和行业都直接或间接的用到了一维条形码(本文是指EAN13).对一维条形码的识别就成为了必要,现在超市及其他场所大部分都是利用光电识读器, ...

  10. 一维条形码识别的整个过程原理通俗易懂讲解

    这里我随便在我的编译原理这本书后面拍的一个条形码来进行说明 以下为一个示意图,一维条形码一共有如下几个区域组成(其实一个条形码下面已经给出了代表哪些数字了,我写的这篇文章讲述其原理,教机器如何读取) ...

最新文章

  1. 知识图谱query与文本相似性如何处理
  2. java协变 生产者理解_Java进阶知识点:协变与逆变
  3. MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)
  4. 五大地形等高线特征_高考复习地形特征描述专题
  5. navicat连接客户端报错
  6. 符乐安:2020年短视频创作将迎来新的高峰
  7. mysql8 安装_MySQL8.x安装使用
  8. Cucumber+Rest Assured快速搭建api自动化测试平台
  9. autoitv3点击windows界面
  10. Vue ui 大法哪家强?
  11. windows-sock-简单例子-转
  12. 官方实力榜:绿军居首黄蜂第二 火箭小降雄鹿飙升
  13. 解决 Python 连不上pip库的问题(使用国内镜像地址)
  14. convert py to pyd
  15. 图的深度优先遍历和广度优先遍历(附例题)
  16. SQLPlus登录及使用
  17. matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文
  18. binary complement
  19. 数据仓库建设之数仓架构
  20. python怎么打开h5文件_python怎么查看h5文件-问答-阿里云开发者社区-阿里云

热门文章

  1. 手机用计算机微信运动记步吗,微信运动怎么开启 微信运动开启计步功能教程...
  2. 网络存储-详解NAS网络存储
  3. 使用include-what-you-use优化编译速度
  4. c语言 exec sql编程,C语言采用嵌入式方式操作数据库exec_sql.doc
  5. Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS
  6. js闭包循环原因_「js基础」JavaScript入门,难不难你来说
  7. matlab把图像白色部分变透明,怎么将PPT中的白底图片,白色部分变透明
  8. 恢复视力的方法(飞行员都用)治近视的秘方!1000度近视降到只有200
  9. 小技巧:更改链接参数 提高京东秒杀成功率
  10. Tableau实战 Tableau官网各版块访问情况(一)总访问量树状图