zoukankan      html  css  js  c++  java
  • Code 128 规则解析

    1.CODE 128 标准

    1.1 code 128码格式:

    格式:image

      从左起: 空白区域,起始字符(Start),数据区域(data),校验码(check),结束字符(Stop),空白区域
      所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。

    1.2 起始字符:


    由于128码有三个字符集。所以有三个起始字符。

    Start A : 表示后面的码值代码是从字符集A中值—— 全部大写字母和标点符号和特殊符号。
                  Start A的值为:六个黑白粗细不一交替地表示为:{2,1,1,4,1,2}       


    Start B: 表示字符集B——全部大小写字符和标点符号。

                 Start B的值为:六个黑白粗细不一交替地表示为:{2,1,1,2,1,4} ;


    Start C: 表示字符集C——数字00-99.

                 Start C的值为:六个黑白粗细不一交替地表示为:{2,1,1,2,3,2}


    1.3 数据字符的表示


    在128码中所有数据都是形如:d1d2…di ,其中di在(1,4)之间,且1<=i<=6 ,且sum(di) =11。

    即总共需要绘制成11条黑白相间的条纹。

    校验码算法:

    校验码=(起始字符值 +第一位数据值*1 +第二位数据值*2+ …. + 第 n 位数据*n )%103;

    1.4 结束字符:


    128码结束字符只有一个在编码表中以Stop 来表示,数据为:{2,3,3,1,1,1,2};

     

     

    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 (实际上没空格)

    3. Code 128 Barcode Table

    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

      

    4.参考文献

    http://blog.csdn.net/jato333/article/details/3748375

    http://blog.csdn.net/dengchonglin/article/details/7680722

  • 相关阅读:
    pycharm的各种设置,配置
    python中文件路径的问题
    Pycharm使用的一些问题!!!
    networkx如何将图写到邻接矩阵里?
    networkX如何读取存储图的二进制.dat文件
    再次理解线性回归与梯度下降
    Python DataFrame 如何删除原来的索引,重新建立索引
    NetworkX初相识
    haproxy + keepalived + mycat 高可用与负载均衡集群配置 centos7
    otter+canal
  • 原文地址:https://www.cnblogs.com/pengzhen/p/4361049.html
Copyright © 2011-2022 走看看