Code128条形码如何计算其宽度?如何得出其校验位?
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条形码如何计算其宽度?如何得出其校验位?的更多相关文章
- 教你看懂Code128条形码
首 页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文 教你看懂C ...
- 5分钟看懂Code128条形码
什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...
- 利用Code128字体将文本转换为code128条形码
利用Code128字体将文本转换为code128条形码[转] 最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...
- ean128与code128 条形码 算法分析
[code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成 就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线, ...
- 如何看懂Code128条形码
条形码就是我们看到的商品上有的那些竖条条. 要不是项目上用到这个或许我一辈子也不会对那个感兴趣. 条形码其实是分成很多类的,虽然他们看起来都差不多…… 常见的条形码的码制被称为39码.128码.417 ...
- 一维条形码攻击技术(Badbarcode)
0x00 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷,所以就自己买了 ...
- Code128
条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案.条形 ...
- 怎样调整CODESOFT中条码线的宽度
CODESOFT是一款功能强大.灵活便捷的标签条码设计打印软件.在使用CODESOFT设计并打印标签,有时会因为打印精度或扫面清晰度等原因,需要调整条形码中行的宽度,即调整条码线宽度.本文,小编 ...
- Lodop条形码竖条和值右端不对齐的解决方法
当Lodop条形码设置的宽度比较短,数值比较多的时候,会出现条码的竖条和右端不对齐.个人测试了一下,发现解决办法有三种:1.增加条形码的宽度.2.隐藏条码本身的值,用text文本代替.3.修改条形码下 ...
随机推荐
- luogu 3375 【模板】KMP字符串匹配
我太菜了 今天才学会kmp #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- 4.7.3 Canonical LR(1) Parsing Tables
4.7.3 Canonical LR(1) Parsing Tables We now give the rules for constructing the LR(1) ACTION and GOT ...
- 51Nod 1486 大大走格子 —— 容斥
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 对于每个点,求出从起点到它,不经过其他障碍点的方案数: 求一 ...
- MySQL:目录
ylbtech-MySQL:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech ...
- log4j日志基本配置
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...
- bzoj 1770: [Usaco2009 Nov]lights 燈【高斯消元+dfs】
参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子-- 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 ...
- 读懂mysql慢查询日志
我们来看一下如何去读懂这些慢查询日志.在跟踪慢查询日志之前,首先你得保证最少发生过一次慢查询.如果你没有可以自己制造一个:root@server# mysql -e 'SELECT SLEEP(8); ...
- [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器
这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...
- 一个包含所有C++头文件的头函数
#include<bits/stdc++.h> using namespace std; 使用方法和平常的头文件一样,#include<bits/stdc++.h>包含以下头文 ...
- 模拟 HDOJ 5387 Clock
题目传送门 /* 模拟:这题没啥好说的,把指针转成角度处理就行了,有两个注意点:结果化简且在0~180内:小时13点以后和1以后是一样的(24小时) 模拟题伤不起!计算公式在代码内(格式:hh/120 ...