CODE 128 国家标准1. code 128码格式:从左起:空白区域,起始字符,数据区域,校验码,结束字符,空白区域。
所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。
2. 起始字符:由于128码有三个字符集。
所以有三个起始字符。
Start A : 表示后面的码值代码是从字符集A中值。
全部大写字母和标点符号和特殊符号。
用六个黑白粗细不一表示为:{2,1,1,4,1,2}Start B: 表示字符集B,全部大小写字符和标点符号。
数据为:{2,1,1,2,1,4}Start C: 表示字符集C,数字00-99. 数据为:{2,1,1,2,3,2}3. 数据字符的表示在128码中所有数据都是有1-4的六位数组表示,总共绘制成11条黑白条纹。
校验码算法:校验码=(起始字符值+第一位数据值*1 +第二位数据值*2+ …. + 第n 位数据*n )%103;4. 结束字符:128码结束字符只有一个在编码表中以Stop 来表示,数据为:{2,3,3,1,1,1,2};++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++图形方式输出Code128C条形码最近的项目牵涉到一维条码打印的问题。
条码的选型上倒没什么,因为要求短且仅包含数字,所以决定选用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 (实际上没空格)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++128码有A\B\C三种方式A B C A B C00 SP SP00 1101100110001 ! ! 01 1100110110002 " "02 1100110011003 # # 03 1001001100004 $ $ 04 1001000110005 % % 05 1000100110006 & & 06 1001100100007 \' \' 07 1001100010008 ( ( 08 1000110010009 ) ) 09 1100100100010 * * 10 1100100010011 + + 11 1100010010012 , , 12 1011001110013 - - 13 1001101110014 . . 14 1001100111015 / / 15 1011100110016 0 0 16 1001110110017 1 1 17 1001110011018 2 2 18 1100111001019 3 3 19 1100101110020 4 4 20 1100100111021 5 5 21 1101110010022 6 6 22 1100111010023 7 7 23 1110110111024 8 8 24 1110100110026 : : 26 1110010011027 ; ; 27 1110110010028 < < 28 1110011010029 = = 29 1110011001030 > > 30 1101101100031 ? ? 31 1101100011032 @ @ 32 1100011011033 A A33 1010001100034 B B 34 1000101100035 C C 35 1000100011036 D D 36 1011000100037 E E 37 1000110100038 F F 38 1000110001039 G G 39 1101000100040 H H 40 1100010100041 I I 41 1100010001042 J J 42 1011011100043 K K 43 1011000111044 L L 44 1000110111045 M M 45 1011101100046 N N 46 1011100011047 O O 47 1000111011048 P P 48 1110111011049 Q Q 49 1101000111050 R R 50 1100010111051 S S 51 1101110100052 T T 52 1101110001053 U U 53 1101110111054 V V 54 1110101100055 W W 55 1110100011056 X X 56 1110001011057 Y Y57 1110110100058 Z Z 58 1110110001059 [ [ 59 1110001101060 \\ \\ 60 1110111101061 ] ] 61 1100100001062 ^ ^ 62 1111000101063 _ _ 63 1010011000064 NUL ` 64 1010000110065 SOH a 65 1001011000066 STX b 66 1001000011067 ETX c 67 1000010110068 EOT d 68 1000010011070 ACK f 70 1011000010071 BEL g 71 1001101000072 BS h 72 1001100001073 HT I 73 1000011010074 LF j 74 1000011001075 VT k 75 1100001001076 FF l76 1100101000076 FF l76 1100101000077 CR m 77 1111011101078 SO n 78 1100001010079 SI o 79 1000111101080 DLE p 80 1010011110081 DC1 q 81 1001011110082 DC2 r 82 1001001111083 DC3 s 83 1011110010084 DC4 t 84 1001111010085 NAK u 85 1001111001086 SYN v 86 1111010010087 ETB w 87 1111001010088 CAN x 88 1111001001089 EM y 89 1101101111090 SUB z 90 1101111011091 ESC { 91 1111011011092 FS | 92 1010111100093 GS } 93 1010001111094 RS ~ 94 1000101111095 US DEL 95 1011110100096 FNC3 FNC3 96 1011110001097 FNC2 FNC2 97 1111010100098 SHIFT SHIFT 98 1111010001099 CodeC CodeC 99 10111011110100 CodeB FNC4 CodeB 10111101110101 FNC4 CodeA CodeA11101011110102 FNC1 FNC1 FNC1 11110101110103 STARTA STARTA STARTA11010000100 104 STARTB STARTB STARTB 11010010000 105 STARTC STARTC STARTC 11010011100 终止符STOP STOP STOP1100011101011。