条形码就是我们看到的商品上有的那些竖条条。
要不是项目上用到这个或许我一辈子也不会对那个感兴趣。
条形码其实是分成很多类的,虽然他们看起来都差不多……
常见的条形码的码制被称为39码、128码、417码等等。
我今天主要讲的是128码即CODE128。
Code128码其实还分成三类,即128A、128B、128C。它们的区别就是对应的字符表不一样。
那么Code128码到底怎么读呢?请看下面的图:
从左往右是黑白相间的条形码,黑的叫“条”(B),白的叫“空”(S)。
如果你仔细看,条和空都有4种不同的宽度。我们将它从细到粗赋予1、2、3、4这几个值。
然后我们开始按照粗细的值来阅读条码、结果如下:
211232231131221213131222212222221224121213121211321132331112
注意这个结果是黑白相间的。别只顾着读“条”忘了都空。这边总共有61位。
Code128码有一个头一个尾。
尾总是2331112,这代表Code128已经结束。其余的部分是6位为一个块,包括头。
头有3种:A)211412 B)211214 C)211232 。这分别表示此Code128是什么类型的。(ABC其中一种)
我们将我们读出来的码,去掉头和尾,重新分一次块:
231131 | 221213 | 131222 | 212222 | 221224 | 121213 | 121211 | 32113
正好是6位为一块。其中最后一个块(除去尾段)是校验位,用于检查该条形码是否被正确编码。
然后,我们有一个字符表。(应该说是我有这张表)这张字符对应各个编号是表示的什么。
我们这个是Code128C型。C型码是纯数字的,每个块对应2位数字。
查表可得 50 09 05 00 01 91 91 。
有了这些知识,我们就可以尝试去写一个程序去生成条形码和识别条形码。
其实生成是比较简单的,而识别就比较麻烦了。通常超市是使用条码枪,通过光学原理来识别的,因为黑白条纹的反光特性不一样。
要是用软件对图像进行识别,会有些麻烦。但是,这正是我们要做的。
附:
Code128 字符表:
可以看出从0-63这前64个字符中A类和B类是一样的。
其中有些控制字符,比如CodeA表示此字段下一个个块临时使用Code128A的字符表中的字符。
还有一些其他的,不是很常见,有兴趣的朋友可以参考GBT 15425-2002 EAN UCC系统 128条码 标准。
注:ABC分别为128A类,128B类,128C类的字符表。有些B类的字符为空表示和A类的一样。
B,S,B,S,B,S// A B C
2,1,2,2,2,2,// sp 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
1,2,2,2,1,3,// & 06
1,2,2,3,1,2,// ... 07
1,3,2,2,1,2,// ( 08
2,2,1,2,1,3,// ) 09
2,2,1,3,1,2,// * 10
2,3,1,2,1,2,// + 11
1,1,2,2,3,2,// , 12
1,2,2,1,3,2,// - 13
1,2,2,2,3,1,// . 14
1,1,3,2,2,2,// / 15
1,2,3,1,2,2,// 0 16
1,2,3,2,2,1,// 1 17
2,2,3,2,1,1,// 2 18
2,2,1,1,3,2,// 3 19
2,2,1,2,3,1,// 4 20
2,1,3,2,1,2,// 5 21
2,2,3,1,1,2,// 6 22
3,1,2,1,3,1,// 7 23
3,1,1,2,2,2,// 8 24
3,2,1,1,2,2,// 9 25
3,2,1,2,2,1,// : 26
3,1,2,2,1,2,// ; 27
3,2,2,1,1,2,// < 28
3,2,2,2,1,1,// = 29
2,1,2,1,2,3,// > 30
2,1,2,3,2,1,// ? 31
2,3,2,1,2,1,// @ 32
1,1,1,3,2,3,// A 33
1,3,1,1,2,3,// B 34
1,3,1,3,2,1,// C 35
1,1,2,3,1,3,// D 36
1,3,2,1,1,3,// E 37
1,3,2,3,1,1,// F 38
2,1,1,3,1,3,// G 39
2,3,1,1,1,3,// H 40
2,3,1,3,1,1,// I 41
1,1,2,1,3,3,// J 42
1,1,2,3,3,1,// K 43
1,3,2,1,3,1,// L 44
1,1,3,1,2,3,// M 45
1,1,3,3,2,1,// N 46
1,3,3,1,2,1,// O 47
3,1,3,1,2,1,// P 48
2,1,1,3,3,1,// Q 49
2,3,1,1,3,1,// R 50
2,1,3,1,1,3,// S 51
2,1,3,3,1,1,// T 52
2,1,3,1,3,1,// U 53
3,1,1,1,2,3,// V 54
3,1,1,3,2,1,// W 55
3,3,1,1,2,1,// X 56
3,1,2,1,1,3,// Y 57
3,1,2,3,1,1,// Z 58
3,3,2,1,1,1,// [ 59
3,1,3,1,1,1,// \ 60
2,2,1,4,1,1,// ] 61
4,3,1,1,1,1,// ^ 62
1,1,1,2,2,4,// _ 63
1,1,1,4,2,2,// NUL ' 64
1,2,1,1,2,4,// SOH a 65
1,2,1,4,2,1,// STX b 66
1,4,1,1,2,2,// ETX c 67
1,4,1,2,2,1,// EOT d 68
1,1,2,2,1,4,// ENQ e 69
1,1,2,4,1,2,// ACK f 70
1,2,2,1,1,4,// BEL g 71
1,2,2,4,1,1,// BS h 72
1,4,2,1,1,2,// HT i 73
1,4,2,2,1,1,// LF j 74
2,4,1,2,1,1,// VT k 75
2,2,1,1,1,4,// FF l 76
4,1,3,1,1,1,// CR m 77
2,4,1,1,1,2,// SO n 78
1,3,4,1,1,1,// SI o 79
1,1,1,2,4,2,// DLE p 80
1,2,1,1,4,2,// DC1 q 81
1,2,1,2,4,1,// DC2 r 82
1,1,4,2,1,2,// DC3 s 83
1,2,4,1,1,2,// DC4 t 84
1,2,4,2,1,1,// NAK u 85
4,1,1,2,1,2,// SYN v 86
4,2,1,1,1,2,// ETB w 87
4,2,1,2,1,1,// CAN x 88
2,1,2,1,3,1,// EM y 89
2,1,4,1,2,1,// SUB z 90
4,1,2,1,2,1,// ESC { 91
1,1,1,1,4,3,// FS | 92
1,1,1,3,4,1,// GS } 93
1,3,1,1,4,1,// RS ~ 94
1,1,4,1,1,3,// US DEL 95
1,1,4,3,1,1,// FNC3 FNC3 96
4,1,1,1,1,3,// FNC2 FNC2 97
4,1,1,3,1,1,// SHIFT SHIFT 98
1,1,3,1,4,1,// CodeC CodeC 99
1,1,4,1,3,1,// CodeB FNC4 CodeB
3,1,1,1,4,1,// FNC4 CodeA CodeA
4,1,1,1,3,1,// FNC1 FNC1 FNC1
2,1,1,4,1,2,// StartA
2,1,1,2,1,4,// StartB
2,1,1,2,3,2,// StartC
2,3,3,1,1,1,2,// Stop
- 教你看懂Code128条形码
首 页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文 教你看懂C ...
- 5分钟看懂Code128条形码
什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...
- [转]看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- 看懂Oracle执行计划
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...
- 一张图看懂ANSYS17.0 流体 新功能与改进
一张图看懂ANSYS17.0 流体 新功能与改进 提交 我的留言 加载中 已留言 一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...
- 怎样看懂Oracle的执行计划
怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...
- 看懂SqlServer查询计划【转】
原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...
- 看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- [转]看懂ExtJS的API
原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...
随机推荐
- 24种设计模式--代理模式【Proxy Pattern】
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...
- SHELL脚本自动备份Linux系统
今天来写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份.直接上脚本如下: #!/bin/sh ...
- php之利用递归写无限极分类
<?php //无限极分类 //parent 的值,是该栏目的父栏目的id 反之是 /*0 安徽 合肥 北京 海淀 中关村 上地 河北 石家庄 */ $area = array( array(' ...
- openerp import namespace
# If True, the Python modules inside the openerp namespace are made available# without the 'openerp. ...
- bzoj2096: [Poi2010]Pilots
Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...
- Windows环境下安装PHPUnit
Windows环境下安装PHPUnit,在此整理一下,以便大家参考. 本人测试安装环境:Windows7(win32) + Apache(2.2.13) + PHP(5.3.6) 1. 以管理员 ...
- GNU FORK PTHREAD SIGNALS
Linux程序设计入门 - fork, pthread, and signals 在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫. fork()及signal经常运用在da ...
- Ugly Windows
poj3923:http://poj.org/problem?id=3923 题意:给出两个整数n.m表示屏幕的长宽.屏幕上有一些窗口,每个窗口都是矩形的,窗口的边框用同一个大写字母来表示,不同的窗口 ...
- Following Orders
uva124:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=60题 ...
- 如何给Qlabel添加clicked属性(覆盖mousePressEvent,处理QMouseEvent消息,反正是软绘制,想怎么样就怎么样)
clickedLabel.h #ifndef CLICKLABEL_H #define CLICKLABEL_H #include <QLabel> #include <QMouse ...