一维条形码Code128的编码与生成
近期疫情形势还是比较严峻的,在此向奋战在一线的医务工作者致敬!武汉加油,全国加油!
最近笔者接了一个项目需要生成条形码并给出配套的解码程序,研究了几个小时以后有了一定成果,记录一下@_@
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的编码与生成相关推荐
- 一维条形码CODE128编码及字符集CODE A、B、C解析
在进行一维条形码打印的编程中知道了条形码有一种类型是code128,也是比较常用的,具体的字符集有3种,分别为A.B.C,这三种的说明如下: A格式:数字.大写字母和控制字符组成的字符串,如ABC.A ...
- 一维条形码ean-13格式编码 最后一位校验码的生成规则 及代码
/*** * @param code * @return 如果返回值是一个大于0的整数 如果返回-2表示所传的参数为空 ,如果返回值是-1 表示字符串中含有非数字字符*/public static i ...
- c语言 生成一维条形码,C# BarcodeLib。dll 生成一维码的问题
public Image GetImage(int height,int width, BarcodeLib.TYPE type,string code) { ...
- 生成一维条形码并转换base64返回给前端展示
项目场景: 提示:这里简述项目相关背景: 在后端随机生成一维条形码给前端展示 效果图: 引入pom <dependency><groupId>net.sf.barcode4j& ...
- qt barcode 生成一维条形码
感谢博主Qt 中利用 GNU barcode 生成一维条形码_liyuanbhu的博客-CSDN博客_qt 生成条形码 提供的资料.然后自己弄了一个测试工程,包含了已经编译好的barcode库.直接调 ...
- 一维条形码***技术(Badbarcode)
[转]http://future-sec.com/badbarcode.html 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec ...
- 一维条形码攻击技术(Badbarcode)
[转]http://future-sec.com/badbarcode.html 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec ...
- 制作Code128B一维条形码的综合教程
制作Code128B一维条形码的综合教程 Code128B的制作 Code128B条形码规则 QT中C++与QML的相互通信 Canvas画布和Flickable QT程序发布 版本信息 程序发布 C ...
- 电脑摄像头一维条形码matlab识别
一维条形码现在广泛用于超市.图书馆.学校等,几乎在生活的各个领域和行业都直接或间接的用到了一维条形码(本文是指EAN13).对一维条形码的识别就成为了必要,现在超市及其他场所大部分都是利用光电识读器, ...
- 一维条形码识别的整个过程原理通俗易懂讲解
这里我随便在我的编译原理这本书后面拍的一个条形码来进行说明 以下为一个示意图,一维条形码一共有如下几个区域组成(其实一个条形码下面已经给出了代表哪些数字了,我写的这篇文章讲述其原理,教机器如何读取) ...
最新文章
- 知识图谱query与文本相似性如何处理
- java协变 生产者理解_Java进阶知识点:协变与逆变
- MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)
- 五大地形等高线特征_高考复习地形特征描述专题
- navicat连接客户端报错
- 符乐安:2020年短视频创作将迎来新的高峰
- mysql8 安装_MySQL8.x安装使用
- Cucumber+Rest Assured快速搭建api自动化测试平台
- autoitv3点击windows界面
- Vue ui 大法哪家强?
- windows-sock-简单例子-转
- 官方实力榜:绿军居首黄蜂第二 火箭小降雄鹿飙升
- 解决 Python 连不上pip库的问题(使用国内镜像地址)
- convert py to pyd
- 图的深度优先遍历和广度优先遍历(附例题)
- SQLPlus登录及使用
- matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文
- binary complement
- 数据仓库建设之数仓架构
- python怎么打开h5文件_python怎么查看h5文件-问答-阿里云开发者社区-阿里云
热门文章
- 手机用计算机微信运动记步吗,微信运动怎么开启 微信运动开启计步功能教程...
- 网络存储-详解NAS网络存储
- 使用include-what-you-use优化编译速度
- c语言 exec sql编程,C语言采用嵌入式方式操作数据库exec_sql.doc
- Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS
- js闭包循环原因_「js基础」JavaScript入门,难不难你来说
- matlab把图像白色部分变透明,怎么将PPT中的白底图片,白色部分变透明
- 恢复视力的方法(飞行员都用)治近视的秘方!1000度近视降到只有200
- 小技巧:更改链接参数 提高京东秒杀成功率
- Tableau实战 Tableau官网各版块访问情况(一)总访问量树状图