Code 11(USD-8)条码结构、编码规则及校验符计算方法
什么是Code 11条码
Code 11条码,也称为USD-8条码,是一种高密度、长度不固定、离散的条码,主要用于标记电信设备。它是由Intermec公司的David Allais于1977年发明的。
条码组成结构
该条码包含以下字元:
- 左侧空白区
- 起始符
- 分隔相邻字元的Gap
- 代表数据的符号字符
- 可选的校验符
- 终止符
- 右侧空白区
左、右空白区至少为10X宽,其中“X”是当前的窄条(空)宽度。
每个字元由三条二空组成,其中第一个和最后一个元素都是条。相邻的两个字元之间由一个窄空(Gap)隔开。
字符集与编码表
Code 11码支持数字 (0-9) 和连字符 (-)。 Code 11的名称就来源于这 11 个字符。
0表示窄条或窄空,1表示宽条或宽空。由编码表可以看出,“0”、“9”、“-”这三个字符只有一个宽元素,其它字符都有两个宽元素。
窄条(空)与宽条(空)的宽度比例在1:3至1:2之间。
校验符及其计算
由于Code 11的自然密度,印刷缺陷会导致扫描仪误读字符。为了弥补这一缺陷,Code 11支持使用一个或两个可选的校验符。对于少于10个字符的数据,使用单个校验符,对于10个或更多字符的数据,使用两个校验符。第1个校验符基于模11算法,第2个校验符基于模9算法。
下面举例说明:
12-12345-67890
此字符串位数是14位,附加上C、K两位校验数字。
C校验符的计算步骤:
(1)每一位字符(连字符“-”作10)乘以对应的权重,然后求和:(0*1)+(9*2)+(8*3)+(7*4)+(6*5)+(10*6)+(5*7)+(4*8)+(3*9)+(2*10)+(1*1)+(10*2)+(2*3)+(1*4)=305;
(2)将上一步骤的结果对11求模:305mod11=8,即第一位校验符C=8。
K校验符的计算步骤:
(1)将第1位校验符C的值加到字符串的尾部,然后每一位字符(连字符“-”作10)乘以对应的权重,然后求和:(8*1)+(0*2)+(9*3)+(8*4)+(7*5)+(6*6)+(10*7)+(5*8)+(4*9)+(3*1)+(2*2)+(1*3)+(10*4)+(2*5)+(1*6)=350;
(2)将上一步骤的结果对11求模:350mod11=9,即第二位校验符K=9。
下图是用Bartender软件生成的条码(最后的字符8和9分别是C和K两位校验符)。