条形码就是我们看到的商品上有的那些竖条条。
要不是项目上用到这个或许我一辈子也不会对那个感兴趣。
条形码其实是分成很多类的,虽然他们看起来都差不多……
常见的条形码的码制被称为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也很庞大,并且看起来并不 ...
随机推荐
- php中文乱码
一. 首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Typ ...
- 利用WebRequest类上传文件
说明:1.WebRequest类是一个抽象类,所以上传类实际使用的是其子类 2.打开Fiddler软件,监视正常网页的文件上传,可以看到http协议的请求和响应信息,简略说明 (第一行:请求说明 PO ...
- log4j 1.2配置(转载)
转载自:http://www.blogjava.net/kit-soft/archive/2009/08/28/292977.html 第一步:加入log4j-1.2.8.jar到lib下. 第二步: ...
- ecshop分页问题1
点解下一页时弹出 查找原因: json返回 分页查询之后返回的 filter 数据为空 问题在这: $deliveryInfo['fliter'] $deliveryInfo['page_count ...
- PHP面向对象(OOP):__call()处理调用错误
在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在, ...
- TC2.0中怎样调用汇编程序
转载于: TC2.0中怎样调用汇编程序 一.概述 TC是美国BORLAND 公司在IBM PC机上开发的一个高效.优化的C编译程序,它自带高效的全屏幕编辑程序,在集成开发环境下可支持编辑.编译.连接调 ...
- SOA和微服务
SOA和微服务 SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平 ...
- 转:使用 Docker 搭建 Java Web 运行环境
原文来自于:http://www.codeceo.com/article/docker-java-web-runtime.html Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都 ...
- 登录远程SQL服务器
一 看ping 服务器IP能否ping通. 这个实际上是看和远程sql server 2000服务器的物理连接是否存在.如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务 ...
- 首页重定位到mian.action上
<body onload="top.location.href='<%=request.getContextPath()%>/main.action';">