条形码就是我们看到的商品上有的那些竖条条。
要不是项目上用到这个或许我一辈子也不会对那个感兴趣。
条形码其实是分成很多类的,虽然他们看起来都差不多……
常见的条形码的码制被称为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也很庞大,并且看起来并不 ...
随机推荐
- EBS成本核算方法
业务背景 成本核算方法,对应EBS系统中的成本方法,有四种: 1.标准成本 2.平均成本 平均成本又分为永续平均成本,即 Average Cost 期间平均成本,按照期间(自然月)来计算的平均成本 F ...
- 【工具篇】xshell
SSH.telnet.串口登录等,类似Secure CRT,蛮好用的. 中文显示乱码的解决方法,file->properties,在Encoding那里修改为UTF-8 修改颜色,点Edit修改 ...
- SGU 221.Big Bishops(DP)
题意: 给一个n*n(n<=50)的棋盘,放上k个主教(斜走),求能放置的种类总数. Solution : 同SGU 220,加个高精度就好了. code #include <iostre ...
- 初涉JavaScript模式 (3) : 字面量
什么是字面量? 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScri ...
- WordPress防暴力破解:安全插件和用.htpasswd保护WordPress控制面板
正在用Wordpress的博主们一定知道最近全球兴起的一波黑客锁定Wordpress暴力破解控制面板密码的风波了,据CloudFlare执行长Matthew Prince所说,所谓的暴力密码攻击是输入 ...
- php实现返回上一页的功能的3种有效方法
php实现返回上一页的功能的3种有效方法 header(location:你的上一页的路径); // 注意这个函数前不能有输出 header(location:.getenv("HT ...
- PHP面向对象(OOP):克隆对象__clone()方法
有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象, ...
- sphinx ---rotate 运行机制
如果sphinx在运行中,要indexer时,需要加上--rotate参数,这样索引完就直接生效了. 原因是sphinx的searchd在启动时会创建一个 .spl 锁文件,并在关闭时会删除它.在in ...
- DIV+CSS外部字体引用
注意: 由于各个浏览器兼容问题大家还是少用这个,下面是具体的使用方法和效果截图: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN&qu ...
- openerp report image
webkit : 再mako 文件中插入以下代码, <% %>标签用于再mako中定义代码或者函数. 然后 ${ embed_image('图片类型', 图片字段 , 宽度,高度) } ...