条形码就是我们看到的商品上有的那些竖条条。

要不是项目上用到这个或许我一辈子也不会对那个感兴趣。
条形码其实是分成很多类的,虽然他们看起来都差不多……
常见的条形码的码制被称为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条形码的更多相关文章

  1. 教你看懂Code128条形码

    首     页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文   教你看懂C ...

  2. 5分钟看懂Code128条形码

    什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...

  3. [转]看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

  4. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  5. 一张图看懂ANSYS17.0 流体 新功能与改进

    一张图看懂ANSYS17.0 流体 新功能与改进   提交 我的留言 加载中 已留言   一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...

  6. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  7. 看懂SqlServer查询计划【转】

    原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...

  8. 看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

  9. [转]看懂ExtJS的API

    原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...

随机推荐

  1. c++primerplus(第六版)编程题——第3章(数据类型)

    声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. 工程命名和文件命名可以命名成易识 ...

  2. 【BZOJ1500】【块状链表】维修数列

    Description Input 输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述 ...

  3. Linux设置固定IP

    此处需整理 问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址? 如果你想要为CentOS 7中 ...

  4. sed 简明教程

    做个标记 http://coolshell.cn/articles/9104.html sed全名叫stream editor,流编辑器,用程序的方式来编辑文本,相当的hacker啊.sed基本上就是 ...

  5. TatukGIS - GisDefs - CreateMSJET 函数

    函数名称  CreateMSJET 所在单元  GisDefs 函数原型           function CreateMSJET(const _path: String): String;   ...

  6. Asp.Net MVC5 格式化输出时间日期

    刚好用到这个,网上找的全部是输出文本框内容的格式化日期时间 而我需要只是在一个表格中的单元个中输出单纯的文字 最后在MSDN上找到 HtmlHelper.FormatValue 方法 public s ...

  7. Redmine配置

    官网步骤说明 http://www.redmine.org/projects/redmine/wiki/RedmineInstall 搭环境 1.MySql 2.RailsInstaller:Redm ...

  8. BZOJ 1022 小约翰的游戏

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...

  9. VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数

    这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵. 至于MakeObjectInstance是 ...

  10. Samples DataBind FastJson循环引用问题

    Fastjson full support databind, it's simple to use. Encode import com.alibaba.fastjson.JSON; Group g ...