从左起: 空白区域,起始字符(Start),数据区域(data),校验码(check),结束字符(Stop),空白区域。       
  所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。 
由于128码有三个字符集。所以有三个起始字符。       
| Start A : 表示后面的码值代码是从字符集A中值—— 全部大写字母和标点符号和特殊符号。                            Start B的值为:六个黑白粗细不一交替地表示为:{2,1,1,2,1,4} ;               | 
     
     
在128码中所有数据都是形如:d1d2…di ,其中di在(1,4)之间,且1<=i<=6 ,且sum(di) =11。
即总共需要绘制成11条黑白相间的条纹。        
校验码算法:
| 校验码=(起始字符值 +第一位数据值*1 +第二位数据值*2+ …. + 第 n 位数据*n )%103; | 
     
128码结束字符只有一个在编码表中以Stop 来表示,数据为:{2,3,3,1,1,1,2};
最近的项目牵涉到一维条码打印的问题。条码的选型上倒没什么,因为要求短且仅包含数字,所以决定选用Code128C。在国外的网站上找了点资料研究了下,终于大致搞懂了Code128C的原理和实现方法。
Code128C只能编码长度是偶数的数字串,这是它的前提之一。说起来编码规则很简单,00 - 99 这100个数字每个数字都预先规定好一个条码,然后把原始的待编码字符串两位两位的读取,每个两位都从上面提到的码表中找到对应的条码,追加。
举个例子,我们要打印12345678的Code128c条码。
首先打印Code128c的条码头,bbsbssbbbss。(b代表1个单位宽度的竖线,s代表1个单位宽度的空白)
然后对12345678编码。
我们把它看成 12 34 56 78。12对应的条码是bsbbssbbbss,34对应的条码是bsssbsbbsss,56对应的条码是bbbsssbsbbs,78对应的条码是bbssssbsbss。按次序堆积起来就是了。
现在应该很好理解为什么C型128码可以打印的比较短,就是因为输出的信息被压缩到原来的一半。
接下来就是一个自校验码。计算方法是:(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47。再追加47对应的条码bsssbbbsbbs。
这里有个注意点是,第n组数字要乘以n。比如,12是第一组所以乘1,而34是第二组所以乘2。
最后就是终结符,固定为bbsssbbbsbsbb,也追加。
      如此得出一个可以代表条形码的字符串:      
      bbsbssbbbss bsbbssbbbss bsssbsbbsss bbbsssbsbbs bbssssbsbss bsssbbbsbbs bbsssbbbsbsbb (本字符串中的空格仅作演示,实际编码的时候不会产生空格)
也就是 StartC 12 34 56 78 47 Stop (实际上没空格)
| Value | Code Set A | Code Set B | Code Set C | Bar/Space Pattern B S B S B S | 
|---|---|---|---|---|
| 0 | SP | SP | 00 | 2 1 2 2 2 2 | 
| 1 | ! | ! | 01 | 2 2 2 1 2 2 | 
| 2 | " | " | 02 | 2 2 2 2 2 1 | 
| 3 | # | # | 03 | 1 2 1 2 2 3 | 
| 4 | $ | $ | 04 | 1 2 1 3 2 2 | 
| 5 | % | % | 05 | 1 3 1 2 2 2 | 
| 6 | & | & | 06 | 1 2 2 2 1 3 | 
| 7 | ‘ | ‘ | 07 | 1 2 2 3 1 2 | 
| 8 | ( | ( | 08 | 1 3 2 2 1 2 | 
| 9 | ) | ) | 09 | 2 2 1 2 1 3 | 
| 10 | * | * | 10 | 2 2 1 3 1 2 | 
| 11 | + | + | 11 | 2 3 1 2 1 2 | 
| 12 | , | , | 12 | 1 1 2 2 3 2 | 
| 13 | - | - | 13 | 1 2 2 1 3 2 | 
| 14 | . | . | 14 | 1 2 2 2 3 1 | 
| 15 | / | / | 15 | 1 1 3 2 2 2 | 
| 16 | 0 | 0 | 16 | 1 2 3 1 2 2 | 
| 17 | 1 | 1 | 17 | 1 2 3 2 2 1 | 
| 18 | 2 | 2 | 18 | 2 2 3 2 1 1 | 
| 19 | 3 | 3 | 19 | 2 2 1 1 3 2 | 
| 20 | 4 | 4 | 20 | 2 2 1 2 3 1 | 
| 21 | 5 | 5 | 21 | 2 1 3 2 1 2 | 
| 22 | 6 | 6 | 22 | 2 2 3 1 1 2 | 
| 23 | 7 | 7 | 23 | 3 1 2 1 3 1 | 
| 24 | 8 | 8 | 24 | 3 1 1 2 2 2 | 
| 25 | 9 | 9 | 25 | 3 2 1 1 2 2 | 
| 26 | : | : | 26 | 3 2 1 2 2 1 | 
| 27 | ; | ; | 27 | 3 1 2 2 1 2 | 
| 28 | < | < | 28 | 3 2 2 1 1 2 | 
| 29 | = | = | 29 | 3 2 2 2 1 1 | 
| 30 | > | > | 30 | 2 1 2 1 2 3 | 
| 31 | ? | ? | 31 | 2 1 2 3 2 1 | 
| 32 | @ | @ | 32 | 2 3 2 1 2 1 | 
| 33 | A | A | 33 | 1 1 1 3 2 3 | 
| 34 | B | B | 34 | 1 3 1 1 2 3 | 
| 35 | C | C | 35 | 1 3 1 3 2 1 | 
| 36 | D | D | 36 | 1 1 2 3 1 3 | 
| 37 | E | E | 37 | 1 3 2 1 1 3 | 
| 38 | F | F | 38 | 1 3 2 3 1 1 | 
| 39 | G | G | 39 | 2 1 1 3 1 3 | 
| 40 | H | H | 40 | 2 3 1 1 1 3 | 
| 41 | I | I | 41 | 2 3 1 3 1 1 | 
| 42 | J | J | 42 | 1 1 2 1 3 3 | 
| 43 | K | K | 43 | 1 1 2 3 3 1 | 
| 44 | L | L | 44 | 1 3 2 1 3 1 | 
| 45 | M | M | 45 | 1 1 3 1 2 3 | 
| 46 | N | N | 46 | 1 1 3 3 2 1 | 
| 47 | O | O | 47 | 1 3 3 1 2 1 | 
| 48 | P | P | 48 | 3 1 3 1 2 1 | 
| 49 | Q | Q | 49 | 2 1 1 3 3 1 | 
| 50 | R | R | 50 | 2 3 1 1 3 1 | 
| 51 | S | S | 51 | 2 1 3 1 1 3 | 
| 52 | T | T | 52 | 2 1 3 3 1 1 | 
| 53 | U | U | 53 | 2 1 3 1 3 1 | 
| 54 | V | V | 54 | 3 1 1 1 2 3 | 
| 55 | W | W | 55 | 3 1 1 3 2 1 | 
| 56 | X | X | 56 | 3 3 1 1 2 1 | 
| 57 | Y | Y | 57 | 3 1 2 1 1 3 | 
| 58 | Z | Z | 58 | 3 1 2 3 1 1 | 
| 59 | [ | [ | 59 | 3 3 2 1 1 1 | 
| 60 | \ | \ | 60 | 3 1 4 1 1 1 | 
| 61 | ] | ] | 61 | 2 2 1 4 1 1 | 
| 62 | ^ | ^ | 62 | 4 3 1 1 1 1 | 
| 63 | _ | _ | 63 | 1 1 1 2 2 4 | 
| 64 | NUL | ` | 64 | 1 1 1 4 2 2 | 
| 65 | SOH | a | 65 | 1 2 1 1 2 4 | 
| 66 | STX | b | 66 | 1 2 1 4 2 1 | 
| 67 | ETX | c | 67 | 1 4 1 1 2 2 | 
| 68 | EOT | d | 68 | 1 4 1 2 2 1 | 
| 69 | ENQ | e | 69 | 1 1 2 2 1 4 | 
| 70 | ACK | f | 70 | 1 1 2 4 1 2 | 
| 71 | BEL | g | 71 | 1 2 2 1 1 4 | 
| 72 | BS | h | 72 | 1 2 2 4 1 1 | 
| 73 | HT | i | 73 | 1 4 2 1 1 2 | 
| 74 | LF | j | 74 | 1 4 2 2 1 1 | 
| 75 | VT | k | 75 | 2 4 1 2 1 1 | 
| 76 | FF | I | 76 | 2 2 1 1 1 4 | 
| 77 | CR | m | 77 | 4 1 3 1 1 1 | 
| 78 | SO | n | 78 | 2 4 1 1 1 2 | 
| 79 | SI | o | 79 | 1 3 4 1 1 1 | 
| 80 | DLE | p | 80 | 1 1 1 2 4 2 | 
| 81 | DC1 | q | 81 | 1 2 1 1 4 2 | 
| 82 | DC2 | r | 82 | 1 2 1 2 4 1 | 
| 83 | DC3 | s | 83 | 1 1 4 2 1 2 | 
| 84 | DC4 | t | 84 | 1 2 4 1 1 2 | 
| 85 | NAK | u | 85 | 1 2 4 2 1 1 | 
| 86 | SYN | v | 86 | 4 1 1 2 1 2 | 
| 87 | ETB | w | 87 | 4 2 1 1 1 2 | 
| 88 | CAN | x | 88 | 4 2 1 2 1 1 | 
| 89 | EM | y | 89 | 2 1 2 1 4 1 | 
| 90 | SUB | z | 90 | 2 1 4 1 2 1 | 
| 91 | ESC | { | 91 | 4 1 2 1 2 1 | 
| 92 | FS | | | 92 | 1 1 1 1 4 3 | 
| 93 | GS | } | 93 | 1 1 1 3 4 1 | 
| 94 | RS | ~ | 94 | 1 3 1 1 4 1 | 
| 95 | US | DEL | 95 | 1 1 4 1 1 3 | 
| 96 | FNC 3 | FNC 3 | 96 | 1 1 4 3 1 1 | 
| 97 | FNC 2 | FNC 2 | 97 | 4 1 1 1 1 3 | 
| 98 | SHIFT | SHIFT | 98 | 4 1 1 3 1 1 | 
| 99 | CODE C | CODE C | 99 | 1 1 3 1 4 1 | 
| 100 | CODE B | FNC 4 | CODE B | 1 1 4 1 3 1 | 
| 101 | FNC 4 | CODE A | CODE A | 3 1 1 1 4 1 | 
| 102 | FNC 1 | FNC 1 | FNC 1 | 4 1 1 1 3 1 | 
| 103 | Start A | Start A | Start A | 2 1 1 4 1 2 | 
| 104 | Start B | Start B | Start B | 2 1 1 2 1 4 | 
| 105 | Start C | Start C | Start C | 2 1 1 2 3 2 | 
| 106 | Stop | Stop | Stop | 2 3 3 1 1 1 2 | 
http://blog.csdn.net/jato333/article/details/3748375
http://blog.csdn.net/dengchonglin/article/details/7680722
原文:http://www.cnblogs.com/pengzhen/p/4361049.html