如何看懂Code128条形码
条形码就是我们看到的商品上有的那些竖条条。 要不是项目上用到这个或许我一辈子也不会对那个感兴趣。 条形码其实是分成很多类的,虽然他们看起来都差不多…… 常见的跣温氲穆胫票怀莆?9码、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