原文链接

Code128条形码是一个非常高密的字母数字条码,能够存储需要的编码数据,它可以编码所有128个ASCII码字符,它使用最少的空间。

在Code128符号体系中,每个数据字符编码都是由11个黑或白模块组成,这11个模块由三个条和三个空来形成,条和空可以由1-4个模块的宽度来组成。停止字符由13个模块组成。

code128码符号包括一个静止区(10倍X-尺寸 )、一个开始字符、编码数据、一个检测字符、停止字符和一个尾部的静止区(10倍X-尺寸),为了获得最佳的扫描效果(使用接触式扫描器),静止区至少要在6.35mm以上。

为了保证条形码的可读性(绝大都数条码扫描器都可以识度),最小的X-尺寸为7.5mil,最小的条形码高度是条形码宽度的15%或者6.35mm以上。

有106个不同的3条/3空组合,106个组合中的任何一个都可以被分配为三个不同字符集含义之一,code128的字符设置参见下面附录。通过三个不同的开始字符来进行标识,START CodeA允许所有的键盘字符+控制字符和特殊字符进行编码,START CodeB包括所有标准字母数字键盘字符+小写字母和特殊字符,START CodeC包括一个100位数字(00-99),可用于编码数字数据的密度压缩。

在Code128条形码内,可以通过特殊的字符代码和SHIFT进行代码集之间的转移,转移到指定的字符集。

FNC代码定义为条码扫描器的指示。 FNC1是保留供将来使用。 FNC2告诉读取器去存储读取的数据和传输它。FNC3是保留读码器初始化和其他读码器功能。 FNC4是保留为未来的应用。

每个字符都有一个值,范围从0到105,这个值被用来计算code128条形码的校验字符。

校验字符通过MOD103算法,下面举例说明:
例子:BarCode 1

信息:StartB B a r C o d e 1

值:104 34 65 82 35 79 68 69 0 17

位置:- 1 2 3 4 5 6 7 8 9

计算:104+(34 *1)+(65 *2)+(82 *3)+ (35 *4) + (79 *5) +(68 *6) + (69 *7) + (0 *8) + (17 *9) = 2093

2093/103=20余 33

33=A

完整的条形码信息: (Start B)BarCode 1(A)(STOP)

注意:当你打印校验字符“A”时,你需打印ASCII字符数65(而不是33),你必须增加32到校验数上,然后找出打印的ASCII字符。比如说,你使用START A打印codeA条码,计算出的校验数字是64,你可能会认为打印一个NULL字符,那你就错了,你必须增加32得到一个96,你能够打印出ASCII字符96( `字符)。

Code128条形码的高度必须至少是条形码宽度的0.15倍或者6.35mm,以两个数值的较大者为准,Code128条形码的总宽度由下面的公式得出:

L = (11C + 35)X (字母数字) ; L = (5.5C + 35)X(数字仅使用codeC)

这里:

L = code128条形码的宽度(不包括静止区)(英寸为单位)

C = 数据字符、代码字符和转移字符的数量(不包括开始、停止、校验字符,他们将被自动添加)

X = X-尺寸(英寸为单位,比如,7mil条形码的X-尺寸为0.007英寸)

下面使用三个例子,分别说明code128条形码长度的计算:

1、下图条形码通过Bartender软件编辑,采用code128A字符集,条形码密度为16.39mil,字符数为7。


根据公式进行计算L=(11*7+35)*0.01639=1.83568英寸=46.6mm

根据公式计算的code128条形码宽度与软件实际生成的条形码宽度是一致的。

2、下图条形码通过Bartender软件编辑,采用code128C字符集,条形码密度为16.39mil,字符数为10。


根据公式(全部为codeC时的公式)进行计算L=(5.5*10+35)*0.01639=1.4751英寸=37.5mm

根据公式计算的code128条形码宽度与软件实际生成的条形码宽度是一致的。

采用code128C时也可以采用2位解码的方式,如上图所示的1256742345,可以解码为“12”“56”“74”“23”“45”总共5个字符。

根据公式进行计算L=(11*5+35)*0.01639=1.4751英寸=37.5mm,与使用另外一个公式的结果是一致的。

3、下图条形码通过Bartender软件编辑,前面的小写字母采用code128B字符集,后面的数字采用code128C字符集,中间使用了shift转换字符,条形码密度为16.39mil,字符数为10。


下面进行字符数统计:“abc”采用code128B字符集,计算为3个字符,“6742345”采用code128C字符集,计算为4个字符,中间转换字符Shift计算为1个字符,总共为8个字符。

根据公式进行计算L=(11*8+35)*0.01639=2.01597英寸=51.2mm

根据公式计算的code128条形码宽度与软件实际生成的条形码宽度是一致的。

附录:Code128条形码字符表

下表显示了三个不同的字符集,每个字符的十进制值是用来计算校验字符。最后一列显示的字符模式的条和空。数字显示模块的数量范围内给定的空间或酒吧。为了得到扩展ASCII十进制,添加32在第一列的十进制值。这里有一个很好的扩展ASCII表。请注意,code128只能编码英文字母。

Code A Code B Code C 图案 想要打印的ASCII字符
0 SP SP 00 2 1 2 2 2 2 SP(ASCII 32)
1 ! ! 01 2 2 2 1 2 2 !(ASCII 33)
2 " " 02 2 2 2 2 2 1 "(ASCII 34)
3 # # 03 1 2 1 2 2 3 #(ASCII 35)
4 $ $ 04 1 2 1 3 2 2 $ (ASCII 36)
5 % % 05 1 3 1 2 2 2 % (ASCII 37)
6 & & 06 1 2 2 2 1 3 & (ASCII 38)
7 ' ' 07 1 2 2 3 1 2 ' (ASCII 39)
8 ( ( 08 1 3 2 2 1 2 ( (ASCII 40)
9 ) ) 09 2 2 1 2 1 3 ) (ASCII 41)
10 * * 10 2 2 1 3 1 2 * (ASCII 42)
11 + + 11 2 3 1 2 1 2 + (ASCII 43)
12 , , 12 1 1 2 2 3 2 , (ASCII 44)
13 - - 13 1 2 2 1 3 2 - (ASCII 45)
14 . . 14 1 2 2 2 3 1 . (ASCII 46)
15 / / 15 1 1 3 2 2 2 / (ASCII 47)
16 0 0 16 1 2 3 1 2 2 0 (ASCII 48)
17 1 1 17 1 2 3 2 2 1 1(ASCII 49)
18 2 2 18 2 2 3 2 1 1 2 (ASCII 50)
19 3 3 19 2 2 1 1 3 2 3 (ASCII 51)
20 4 4 20 2 2 1 2 3 1 4 (ASCII 52)
21 5 5 21 2 1 3 2 1 2 5 (ASCII 53)
22 6 6 22 2 2 3 1 1 2 6 (ASCII 54)
23 7 7 23 3 1 2 1 3 1 7 (ASCII 55)
24 8 8 24 3 1 1 2 2 2 8 (ASCII 56)
25 9 9 25 3 2 1 1 2 2 9 (ASCII 57)
26 : : 26 3 2 1 2 2 1 : (ASCII 57)
27 ; ; 27 3 1 2 2 1 2 ; (ASCII 59)
28 < < 28 3 2 2 1 1 2 < (ASCII 60)
29 = = 29 3 2 2 2 1 1 = (ASCII 61)
30 > > 30 2 1 2 1 2 3 > (ASCII 62)
31 ? ? 31 2 1 2 3 2 1 ? (ASCII 63)
32 @ @ 32 2 3 2 1 2 1 @ (ASCII 64)
33 A A 33 1 1 1 3 2 3 A (ASCII 65)
34 B B 34 1 3 1 1 2 3 B (ASCII 66)
35 C C 35 1 3 1 3 2 1 C (ASCII 67)
36 D D 36 1 1 2 3 1 3 D (ASCII 68)
37 E E 37 1 3 2 1 1 3 E (ASCII 69)
38 F F 38 1 3 2 3 1 1 F (ASCII 70)
39 G G 39 2 1 1 3 1 3 G (ASCII 71)
40 H H 40 2 3 1 1 1 3 H (ASCII 72)
41 I I 41 2 3 1 3 1 1 I (ASCII 73)
42 J J 42 1 1 2 1 3 3 J (ASCII 74)
43 K K 43 1 1 2 3 3 1 K (ASCII 75)
44 L L 44 1 3 2 1 3 1 L (ASCII 76)
45 M M 45 1 1 3 1 2 3 M (ASCII 77)
46 N N 46 1 1 3 3 2 1 N (ASCII 78)
47 O O 47 1 3 3 1 2 1 O (ASCII 79)
48 P P 48 3 1 3 1 2 1 P (ASCII 80)
49 Q Q 49 2 1 1 3 3 1 Q (ASCII 81)
50 R R 50 2 3 1 1 3 1 R (ASCII 82)
51 S S 51 2 1 3 1 1 3 S (ASCII 83)
52 T T 52 2 1 3 3 1 1 T (ASCII 84)
53 U U 53 2 1 3 1 3 1 U (ASCII 85)
54 V V 54 3 1 1 1 2 3 V (ASCII 86)
55 W W 55 3 1 1 3 2 1 W (ASCII 87)
56 X X 56 3 3 1 1 2 1 X (ASCII 88)
57 Y Y 57 3 1 2 1 1 3 Y (ASCII 89)
58 Z Z 58 3 1 2 3 1 1 Z (ASCII 90)
59 [ [ 59 3 3 2 1 1 1 [ (ASCII 91)
60 \ \ 60 3 1 4 1 1 1 \ (ASCII 92)
61 ] ] 61 2 2 1 4 1 1 ] (ASCII 93)
62 ^ ^ 62 4 3 1 1 1 1 ^ (ASCII 94)
63 _ _ 63 1 1 1 2 2 4 _ (ASCII 95)
64 NUL ` 64 1 1 1 4 2 2 ` (ASCII 96)
65 SOH a 65 1 2 1 1 2 4 a (ASCII 97)
66 STX b 66 1 2 1 4 2 1 b (ASCII 98)
67 ETX c 67 1 4 1 1 2 2 c (ASCII 99)
68 EOT d 68 1 4 1 2 2 1 d (ASCII 100)
69 ENQ e 69 1 1 2 2 1 4 e (ASCII 101)
70 ACK f 70 1 1 2 4 1 2 f (ASCII 102)
71 BEL g 71 1 2 2 1 1 4 g (ASCII 103)
72 BS h 72 1 2 2 4 1 1 h (ASCII 104)
73 HT i 73 1 4 2 1 1 2 i (ASCII 105)
74 LF j 74 1 4 2 2 1 1 j (ASCII 106)
75 VT k 75 2 4 1 2 1 1 k (ASCII 107)
76 FF l 76 2 2 1 1 1 4 l (ASCII 108)
77 CR m 77 4 1 3 1 1 1 m (ASCII 109)
78 SO n 78 2 4 1 1 1 2 n (ASCII 110)
79 SI o 79 1 3 4 1 1 1 o (ASCII 111)
80 DLE p 80 1 1 1 2 4 2 p (ASCII 112)
81 DC1 q 81 1 2 1 1 4 2 q (ASCII 113)
82 DC2 r 82 1 2 1 2 4 1 r (ASCII 114)
83 DC3 s 83 1 1 4 2 1 2 s (ASCII 115)
84 DC4 t 84 1 2 4 1 1 2 t (ASCII 116)
85 NAK u 85 1 2 4 2 1 1 u (ASCII 117)
86 SYN v 86 4 1 1 2 1 2 v (ASCII 118)
87 ETB w 87 4 2 1 1 1 2 w (ASCII 119)
88 CAN x 88 4 2 1 2 1 1 x (ASCII 120)
89 EM y 89 2 1 2 1 4 1 y (ASCII 121)
90 SUB z 90 2 1 4 1 2 1 z (ASCII 122)
91 ESC { 91 4 1 2 1 2 1 { (ASCII 123)
92 FS | 92 1 1 1 1 4 3 | (ASCII 124)
93 GS } 93 1 1 1 3 4 1 } (ASCII 125)
94 RS ~ 94 1 3 1 1 4 1 ~ (ASCII 126)
95 (Hex 7F) US DEL 95 1 1 4 1 1 3 DEL (ASCII 127)
96 (Hex 80) FNC 3 FNC 3 96 1 1 4 3 1 1 ? (ASCII 128)
97 (Hex 81) FNC 2 FNC 2 97 4 1 1 1 1 3 ü (ASCII 129)
98 (Hex 82) SHIFT SHIFT 98 4 1 1 3 1 1 é (ASCII 130)
99 (Hex 83) CODE C CODE C 99 1 1 3 1 4 1 a (ASCII 131)
100 (Hex 84) CODE B FNC 4 CODE B 1 1 4 1 3 1 ? (ASCII 132)
101 (Hex 85) FNC 4 CODE A CODE A 3 1 1 1 4 1 à (ASCII 133)
102 (Hex 86) FNC 1 FNC 1 FNC 1 4 1 1 1 3 1 ? (ASCII 134)
开始符号 图案 想要打印的ASCII字符
103 (Hex 87) START (Code A) 2 1 1 4 1 2 ? (ASCII 135)
104 (Hex 88) START (Code B) 2 1 1 2 1 4 ? (ASCII 136)
105 (Hex 89) START (Code C) 2 1 1 2 3 2 ‰ (ASCII 137)
106 (Hex 6A) STOP (All Codes) 2 3 3 1 1,1 2 ? (ASCII 138)

原文:http://www.chongshang.com.cn/code128_width.shtml

Code128条形码如何计算其宽度?如何得出其校验位?的更多相关文章

  1. 教你看懂Code128条形码

    首     页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文   教你看懂C ...

  2. 5分钟看懂Code128条形码

    什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...

  3. 利用Code128字体将文本转换为code128条形码

    利用Code128字体将文本转换为code128条形码[转]   最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...

  4. ean128与code128 条形码 算法分析

    [code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成 就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线, ...

  5. 如何看懂Code128条形码

    条形码就是我们看到的商品上有的那些竖条条. 要不是项目上用到这个或许我一辈子也不会对那个感兴趣. 条形码其实是分成很多类的,虽然他们看起来都差不多…… 常见的条形码的码制被称为39码.128码.417 ...

  6. 一维条形码攻击技术(Badbarcode)

    0x00 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷,所以就自己买了 ...

  7. Code128

    条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案.条形 ...

  8. 怎样调整CODESOFT中条码线的宽度

       CODESOFT是一款功能强大.灵活便捷的标签条码设计打印软件.在使用CODESOFT设计并打印标签,有时会因为打印精度或扫面清晰度等原因,需要调整条形码中行的宽度,即调整条码线宽度.本文,小编 ...

  9. Lodop条形码竖条和值右端不对齐的解决方法

    当Lodop条形码设置的宽度比较短,数值比较多的时候,会出现条码的竖条和右端不对齐.个人测试了一下,发现解决办法有三种:1.增加条形码的宽度.2.隐藏条码本身的值,用text文本代替.3.修改条形码下 ...

随机推荐

  1. jquery input 赋值和取值

    记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来,后来改为使用如下代码 ...

  2. hash+set Codeforces Round #291 (Div. 2) C. Watto and Mechanism

    题目传送门 /* hash+set:首先把各个字符串的哈希值保存在set容器里,然后对于查询的每一个字符串的每一位进行枚举 用set的find函数查找是否存在替换后的字符串,理解后并不难.另外,我想用 ...

  3. c# Queue实现生产者(Producer)消费者(Consumer)模式

    我们在开发过程中经常会遇到需要从一个地方不断获取数据然后又需要交给另一个线程对数据进行二次加工的情况,这种场景适合使用生产者-消费者模式. Demo展示 //中间的容器 public static c ...

  4. Java使用 POI 操作Excel

    Java中常见的用来操作 Excel 的方式有2种:JXL和POI.JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本.而POI是Apache 的开源项目,由Java编写的 ...

  5. [ CodeForces 1063 A ] Oh Those Palindromes

    \(\\\) \(Description\) 给出 \(N\) 个小写字母,将他们排成一个字符串,使得这个字符串里包含的回文串最多. \(N\le 10^5\) \(\\\) \(Solution\) ...

  6. ES6:Generator函数(1)

    Generator函数是ES6提供的一种异步编程解决方案.它会返回一个遍历器对象 function* helloWorldGenerator(){ yield “hello”; yield “worl ...

  7. anime.js 实战:实现一个带有描边动画效果的复选框

    在网页或者是APP的开发中,动画运用得当可以起到锦上添花的作用.正确使用动画,不但可以有助于用户理解交互的作用,还可以大大提高网页应用的魅力和使用体验.并且在现在的网页开发中,动画已经成为了一个设计的 ...

  8. scroll的应用

    jQuery(document).ready(function($){ $('#shang').click(function(){ $('html,body').animate({scrollTop: ...

  9. oracle添加联合主键

    1 alter table tablename add constraint unionkeyname primary key (column1,column2); 上面语句中: tablename为 ...

  10. python学习笔记(3)——进制符号&转换公式

    进制转换法则: 进制符号  bin().oct().hex().int('',进制)+待转格式数 10进制→其他进制 # dec2bin # 十进制 to 二进制: bin() >>> ...