zoukankan      html  css  js  c++  java
  • 如何看懂Code128条形码

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

    要不是项目上用到这个或许我一辈子也不会对那个感兴趣。
    条形码其实是分成很多类的,虽然他们看起来都差不多……
    常见的条形码的码制被称为39码、128码、417码等等。
    我今天主要讲的是128码即CODE128。
     
    Code128码其实还分成三类,即128A、128B、128C。它们的区别就是对应的字符表不一样。
    那么Code128码到底怎么读呢?请看下面的图:
    如何看懂Co<wbr>de128条形码 - lava_hammer - lava_hammer的博客
    从左往右是黑白相间的条形码,黑的叫“条”(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
  • 相关阅读:
    Redis与Memcached的incr/decr差异对比
    Linux sudo用法与配置
    Docker 常用命令
    Linux之间配置SSH互信(SSH免密码登录)
    SVN服务器搭建
    shell中参数的传递
    【代码更新】IIC协议建模——读写EEPROM
    串口完整项目之串口收发字符串
    串口发送模块——1字节数据发送
    状态机设计——从简单的按键消抖开始
  • 原文地址:https://www.cnblogs.com/exmyth/p/4810765.html
Copyright © 2011-2022 走看看