1、中华人民共和国国家标准四一七条码发布实施国家技术监督局发布前言本标准非等效采用国际自动识别制造商协会的规范在技术上与国际自动识别制造商协会的规范相兼容保证了本标准与国外先进标准的一致性本标准根据我国二维条码的应用现状在认真分析研究的基础上对规范进行了取舍和补充完善保证了本标准在我国应用的可行性和实用性本标准的附录为标准的附录本标准的附录附录附录附录都是提示的附录本标准由中国物品编码中心提出并归口本标准起草单位中国物品编码中心本标准主要起草人张成海罗秋科李素彩郭卫华赵楠韩继明刘芳黄泽霞中华人民共和国国家标准四一七条码国家技术监督局批准实施范围本标准规定了四一七条码的相关定义结构尺寸及技术要求本标
2、准适用于数据采集与自动识别引用标准下列标准所包含的条文通过在本标准中引用而构成为本标准的条文本标准出版时所示版本均为有效所有标准都会被修订使用本标准的各方应探讨使用下列标准最新版本的可能性条码系统通用术语条码符号术语信息处理八位单字节编码图形字符集第一部分拉丁字母一定义本标准采用下列定义符号字符条码符号中由特定的条空组合而成的表示信息的基本单位码字符号字符的值簇构成四一七条码符号字符集的与码字集对应的相互独立的子集全球标记标识符对数据流的一种特定解释的标识拒读错误在确定位置上的符号字符的丢失或不可译码替代错误在随机位置上的符号字符的错误译码符号描述基本特性四一七条码的基本特性见表表四一七条码的
3、基本特性项目特性可编码字符集全字符及扩展字符或位二进制数据多达种不同的字符集或解释类型连续型多行字符自校验功能有符号尺寸可变高度到行宽度到双向可读是错误纠正码字数到个最大数据容量错误纠正等级为时每个符号表示个大写字母或个数字或个字节附加特性附加选择可选错误纠正等级可跨行扫描宏四一七条码全球标记标识符截短四一七条码为符号的模块宽宏四一七条码见附录截短四一七条码见附录符号结构四一七条码符号是一个多行结构符号的顶部和底部为空白区上下空白区之间为多行结构每行数据符号字符数相同行与行左右对齐直接衔接其最小行数为最大行数为见图每行构成如下左空白区起始符左行指示符号字符个数据符号字符右行指示符号字符终止符右
4、空白区图四一七条码符号的结构符号表示符号字符的结构每一符号字符由个条和个空构成自左向右从条开始每一个条或空包含个模块在一个符号字符中个条和个空的总模块数为见图图符号字符码字集四一七条码码字集包含个码字码字取值范围为在码字集中码字使用应遵守下列规则码字根据当前的压缩模式和解释用于表示数据码字在每一模式中用于具有特定目的符号字符的表示具体规定如下码字用于模式标识见表码字用于见码字用于宏四一七条码见附录码字用于阅读器初始化见码字保留待用符号字符的簇四一七条码符号字符集由三个簇构成每一簇包括以不同的条空形式表示的所有个四一七条码的码字在每一簇中每一符号字符对应唯一的码字其范围为附录的表给出了每一簇的符
5、号字符的条空序列和它们所对应的码字四一七条码使用簇号簇号的定义适用于所有四一七条码符号字符四一七条码符号的每行只使用一个簇中的符号字符同一簇每三行重复一次每一行使用第簇的符号字符第行使用第簇的符号字符第三行使用第簇的符号字符第四行使用第簇的符号字符以此类推行号由上向下递增最上一行行号为对于一个特定符号字符其簇号由下式确定簇号式中分别表示自左向右四个条的模块数参见图例对于图中的符号字符其簇号计算如下簇号对于每一特定的行使用的符号字符的簇号由下式计算簇号行号行指示符号字符行指示符号字符包括左行指示符号字符和右行指示符号字符分别与起始符和终止符相邻接见图行指示符号字符的值码字指示四一七条码的行号行数
6、数据区中数据符号字符的列数错误纠正等级左行指示符号字符右行指示符号字符起始符终止符图左右行指示符号字符左行指示符号字符的值由下式确定当时当时当时右行指示符号字符的值由下式确定当时当时当时式中行号行数错误纠正等级行数数据区的列数第行的簇号例如果一个四一七条码符号为行列错误纠正等级为那么为为模式结构四一七条码有三种数据压缩模式文本压缩模式字节压缩模式数字压缩模式通过应用模式锁定转移码字可在一个四一七条码符号中应用多种模式表示数据模式锁定与模式转移码字模式锁定与模式转换码字用于模式之间的切换见表错误纠正等级见表模式切换码字表模式模式锁定模式转移文本压缩模式大写字母型子模式小写字母型子模式混合型子模式
7、标点型子模式字节压缩模式数字压缩模式见第模式锁定码字用于将当前模式切换为指定的目标模式该模式切换在下一个切换前一直有效模式转移码字用于将文本压缩模式暂时切换为字节压缩模式这种切换仅对切换后的第一个码字有效随后的码字又返回到文本压缩模式的当前子模式锁定模式可将当前模式切换成任一种模式包括切换成当前模式字节压缩模式下不能再用字节模式转移模式切换结构见图模式转移模式锁定图模式切换文本压缩模式子模式文本压缩模式包括下列四个子模式大写字母型子模式小写字母型子模式混合型子模式标点型子模式子模式的设置是为了更有效地表示数据每种子模式选择了文件中出现频率较高的一组字符组成的字符集在子模式中每一个字符对应一个值
8、见表这样可用一个单独的码字表示一个字符对表示字符对的码字由下式计算码字式中依次表示字符对中的高位和低位字符值子模式之间的切换任何模式到文本压缩模式的锁定都是到大写字母型子模式的锁定见图在文本压缩模式中每一个码字用两个基为的值表示范围为如果在一个字符串的尾部有奇数个基为的值需要用值为的虚拟字符填充最后一个码字如果在一个字节转移码字之前紧接着应用做为一个填充那么则无效不允许紧跟在一个子模式转移之后的另一个子模式转移或锁定表为时文本压缩子模式下字符的对应值值大写字母型小写字母型混合型标点型值字符值字符值字符值字符注用于子模式切换子模式转移子模式锁定锁定为小写字母型子模式转移为标点型子模式锁定为混合型
9、子模式锁定为大写字母型子模式锁定为标点型子模式转移为大写字母型子模式图描述子模式的切换结构字节压缩模式字节压缩模式通过基至基的转换将字节序列转移为码字序列对于字节压缩模式有两个模式锁定当所要表示的字节总数不是的倍数时用模式锁定当所要表示的字节总数为的倍数时用模式锁定在应用模式锁定的情况下个字节可通过基至基的转换用个码字表示从左到右进行转换例一个二位进制的数据序列代表十六进制可表示为一个码字序列因为有个数据单元第一个码字选用字节压缩模式锁定码字该个数据字节到个码字的转换由下式给出当所要表示的字节数不是的倍数时必须使用模式锁定码字前每个字节的转换方法与上述方法相同对被整除所剩余的字节应每个字节对应
10、一个码字逐字节用码字表示例数据序列共个字节可将其转移为码字序列表示其中第一个码字为字节数不是的倍数时的字节模式锁定码字前个字节应用基至的转移字节转移方法与上面所述方法相同剩余的字节每个码字对应一个字节依次直接表示模式转移用于从文本压缩模式到字节压缩模式的暂时性转移数字压缩模式数字压缩模式是指从基至基的数据压缩的一种方法为时见数字压缩用于数据位数的压缩数字值的映象见表数字压缩模式能把约三个数字位用一个码字表示尽管在任意数字长度下都可应用数字压缩模式一般推荐当连续的数字位数大于时用数字压缩模式否则应用文本压缩模式表数字压缩模式下的数字值映象数字值字符在数字模式下将根据下述算法对数字位进行编码将数字
11、序列从左向右每位分为一组最后一组包含的数字位可少于个对每一组数字首先在数字序列前加一位有效数字即前导位然后执行基至基的转换例数字序列的表示首先对其进行分组因它共有位故只有一组其次在其最左边加将得到数字序列最后将其转移成基的码字序列结果为译码算法与编码算法相反将每个码字从左向右分为一组每个码字可转换成个数字位其最后一组码字可少于个对于每一组码字先执行基至基的转换然后去掉前导位对上述实例因只有个码字故仅能分为组其转换为去掉前导位得数据编码数据区中的第一个码字是符号长度值它表示数据码字包括符号长度码字的个数模式结构的应用从第二个码字开始文本模式的大写字母型子模式和见译解对每一符号的起始时有效在符号中
12、其模式可按本章给出的模式锁定或模式转移码字进行切换可按进行切换在文本压缩模式中每一码字由表中的两个基为的值表示计算方法见例字符串可以编为字符序列其中为小写字母型子模式锁定为混合型子模式锁定从表可得这些字符所对应的值为可分组为根据上述公式符号字符值计算如下其结果个字符通过子模式切换机制用个码字来表示通过应用锁定和转移的不同压缩可用不同的码字序列表示同一个数据字符串例输入一个个字符的串输出序列序列相对应的码字为序列序列序列是先从小写字母型文本子模式转移到字节压缩模式然后又返回到小写字母型文本子模式序列是仅应用字节压缩模式四一七条码符号的形状为矩形当码字的总数不能正好填充一个矩阵时用码字作为虚拟码字
13、填充虚拟码字填充必须放在可选的宏四一七条码控制模块和错误纠正码字之前全球标记标识符全球标记标识符的表示形式为的取值范围为在符号中用相应的码字序列来表示并激活一组解释这组解释对由数据压缩模式表示的数据流赋予一定的含义直至下一个否则在符号结束之前一直有效值及码字序列当为时对应的码字序列为当为时对应的码字序列为当为时对应的码字序列为以上为之间的码字应用用于国际字符集用于通用目的用于用户自定义在一个四一七条码符号中可应用多重缺省的四一七条码符号缺省的值为在起始位置不需要码字序列来激活这种缺省解释如果当前的值不为并希望使用解释那么可使用码字序列将其转换为缺省解释当值为时字节值的解释由表给出分配给中所规定
14、的字符集阅读器初始化指示符码字用于对阅读器的初始化或编程它必须紧跟在符号长度码字之后放置当用宏四一七条码对阅读器初始化时在每一个符号中均须设置码字包含在一个初始化符号或符号序列中的数据不通过阅读器输出起始符和终止符四一七条码的起始符和终止符是唯一的自左向右由条开始起始符的条空组合序列为终止符的条空组合序列为空白区空白区位于起始符之前终止符之后第一行之上最后一行之下空白区最小宽度为个模块宽错误检测与纠正每一个四一七条码符号至少包含两个错误纠正码字用于符号的错误检测与纠正错误纠正等级四一七条码的错误纠正等级可由用户选择每种错误纠正等级所对应的错误纠正码字数目见表错误纠正容量对于一个给定的错误纠正等
15、级其错误纠正容量由下式确定式中拒读错误数目替代错误数目错误纠正等级错误纠正码字数目表字符集的十进制值错误纠正码字的总数为其中两个用于错误检测其余的错误纠正码字用于错误纠正用一个错误纠正码字恢复一个拒读错误用两个错误纠正码字纠正一个替代错误当被纠正的替代错误数目小于时除外错误纠正容量由下式确定例一个错误纠正等级为的四一七条码符号能纠正个拒读错误或个替代错误或者为和的各种组合但必须满足上述纠正容量条件表四一七条码的错误纠正等级错误纠正等级错误纠正码字数目错误检测与错误纠正码字的计算对于一组给定的数据码字错误纠正码字根据错误控制码算法计算第一步建立符号数据多项式符号数据多项式如下式中多项式的系数由数
16、据码字区中的码字组成其中包括符号长度码字数据码字填充码字宏四一七条码控制块每一数据码字在四一七条码符号中的排列位置见图图数据行标识符及错误纠正第二步建立纠正码字的生成多项式个错误纠正码字的生成多项式如下式中为错误纠正码字的个数在四一七条码符号中的排列位置见图第三步错误纠正码字的计算对一组给定的数据码字和一选定的错误纠正等级错误纠正码字为符号数据多项式乘以然后除以生成多项式所得余式的各系数的补数如果在有限域中的负值等于该值的补数如果在有限域中的负值等于余数的补数错误纠正码字的计算可通过图所示的除法电路来实现第一步将寄存器初始化为第二步将模加模乘模补定义如下式中取值范围为图错误纠正码字编码电路第三
17、步错误纠正码字生成包括两个阶段在第一阶段将开关置于下位符号数据在进入输出端输出的同时进入输入电路经过个时钟脉冲之后第一阶段完成在第二阶段个时钟脉冲中将开关移至上位在保持输入为的同时通过顺序刷新寄存器并对输出求补生成错误纠正码字错误纠正等级选择对于开放式系统不同数量的编码数据所对应的错误纠正等级推荐值见表在四一七条码符号容易损坏的场所建议选用较高的错误纠正等级在封闭系统中可选用低于推荐错误纠正等级的错误纠正等级表四一七条码的推荐错误纠正等级数据码字数错误纠正等级技术要求符号的尺寸符号的模块宽度四一七条码符号可以以多种密度印刷以适应不同的印刷及扫描条件的要求但符号的模块宽度不得小于符号宽度四一七条
18、码符号的宽度由下式计算式中符号宽度数据区的列数符号的模块宽左右空白区尺寸之和行高对已达到推荐的最低错误纠正等级的四一七条码符号其推荐的最小行高为对未达到推荐的最低错误纠正等级的四一七条码符号其最小行高应为符号高度四一七条码符号的高度由下式计算式中符号高度行数行高上下空白区尺寸之和允许误差符号字符的允许误差在四一七符号中每一符号字符的误差包括符号字符允许误差条或空的允许误差边缘到相似边缘的允许误差单元的高度允许误差参见图分别指值的允许误差由下式确定式中符号的模块宽图允许误差测量行间水平错位允许值行间水平错位允许值见图由下式确定式中符号的模块宽图行间水平错位值测量光学对比度四一七条码符号的光学对比
19、度值应不小于供人识读字符供人识读字符可以不印刷也可与条码符号一同印刷在条码符号的周围但不能干扰符号本身及其空白区供人识读字符的尺寸和字体不做具体规定图为一个带有供人识读字符的四一七条码符号实例图供人识读字符附录标准的附录符号字符码字集表给出了四一七条码的码字所对应的三个簇的符号字符自左向右各条空单元的模块数的序列表符号字符码字集第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表续第簇码字码字码字码字码字码字表完第簇码字码字码
20、字码字码字码字附录提示的附录数据编码利用不同的数据压缩模式同一数据信息可以表示为不同的四一七条码符号用四一七条码符号表示特定的数据信息时以下算法用来减少条码符号的码字数目将指针指向数据流的初始位置将当前压缩模式设置为模式设为从开始的连续数字位的数目若则锁定为模式用模式对个字符编码返回到步骤若则从位置开始向右计算数据流中模式字符序列的长度直至遇到非模式字符或者不小于位的数字序列若则锁定为模式用模式对个字符编码返回到步骤若则从位置开始向右计算数据流中字节序列的长度直至遇到模式字符的长度不小于或者数字序列不小于位若且当前模式为则转换到模式在模式下对该单一字节值编码返回到步骤否则锁定到模式在模式下对个
21、字节编码返回至步骤附录提示的附录截短四一七条码在相对干净的环境中条码损坏的可能性很小右行指示符可以省略终止符可以减为一个模块宽的条见图截短四一七条码与标准四一七条码完全兼容图截短四一七条码附录提示的附录宏四一七条码当文件内容太长无法用一个四一七条码符号表示时可用包含多个宏四一七条码的分块表示通过宏四一七条码符号可将一个文件用个条码符号分块表示控制块在宏四一七条码符号中每一符号包含一个控制块控制块跟在与其相关的数据块之后控制块的长度包含在符号长度码字之中控制块给出了文件的标识各分块之间的连接次序以及文件的其他相关信息解码时宏四一七通过控制块信息将各分块的扫描信息重新正确地连接起来而不需考虑扫描阅
22、读的次序控制块以值为的标记码字开始一直到错误纠正码字的起始位置它最少应包含两个强制字段块索引见和文件标识见它也可以包含一定数量的可选字段见控制块的构成以及它在条码符号中的位置见图块索引在宏四一七条码中每一条码符号为整个文件的一个部分为了恢复整个文件每一个部分必须按正确次序联接在控制块中的控制信息为这个组合过程的实现提供了便利条件对于一个宏四一七条码符号的个分块每一条码符号的控制块中的块索引字段包含之间的一个值该值与分块表示的每一条码符号的相对位置对应块索引包括两个码字用中定义的数字压缩模式表示在应用数字压缩之前块索引值不足位时在其前用填充块索引最大允许值是图四一七条码符号布局文件标识在一个宏四
23、一七条码符号中每一分块的文件标识字段的值相同文件标识是一个可变长度字段它从块索引后的第一个码字开始一直延伸到可选字段的起始位置如果存在或延伸至控制块的结束如果可选字段不存在文件标识中的每一码字为之间的一个整数值可选字段可选字段跟在文件标识之后每一个可选字段以一个具体的标记序列开始一直延伸到下一个可选字段的开始如果存在或延伸至控制块的终止若另一个可选字段不存在除分块计数字段之外在文件的分块表示中这些字段总是代表总的文件属性并且不需在多个控制块中出现具体那一个分块包含这些字段取决于所采用的译码器如果一个特殊字段出现在多个分块中那么它必须同时出现在每一分块中标记序列由码字和跟在之后的字段标号组成在每
24、一可选字段中跟在标记序列后的数据为该字段的具体内容任何通用目的或模式标识的码字可在这些字段中使用不使用空缺可选字段表给出了当前已定义的字段标号与可选字段内容缺省压缩模式不考虑前面的模式锁定和模式转移以及总字段长度之间的对应关系表宏四一七条码可选字段标号及其内容字段标号内容压缩模式总字段长度文件名文本压缩模式可变块计数数字压缩模式时间标记数字压缩模式发送方文本压缩模式可变接收方文本压缩模式可变文件尺寸数字压缩模式可变校验数字压缩模式块计数字段取值范围为并且总被编为两个码字如果使用可选的块计数字段那么该字段应在每一块中出现时间标记字段按四一七条码的数字压缩模式编码它以秒为单位以年月日为初始点用已过
25、去的时间表示源文件的时间标记使用这种格式可用四个码字表示任何日期文件尺寸字段包括以整个源文件的字节形式表示的尺寸校验字段包含通过多项式对整个源文件计算求得的位双字节校验符的值大于的字段标号值作为保留值宏四一七条码终止码字在宏四一七条码的最后一个分块符号中控制块含有一个特殊的标记用于表示文件结束该标记为码字放置在控制块的最后附录提示的附录四一七条码符号表示实例我们以字符串为例来说明四一七条码的符号表示方法数据符号字符序列值的求取应用文本模式对字符串的编码如下字符编码混合子模式锁定因在文本模式下可用一个符号字符表示两个字符将字符串配对如下可以看出与字符配对的字符为它是一个附加的填充字符按照文本模式
26、下的编码规则计算如下因此表示的符号字符的值序列为错误纠正码字的求取为计算错误纠正码字作如下定义数据码字数包括数据长度码字用户所选的错误纠正等级错误纠正码字数生成多项式是未知数多项式展开后各项的系数序列错误纠正码字数据码字临时变量生成多项式的系数序列的计算如下首先将展开即然后求序列值的补数用到以下伪程序例如错误纠正等级为的生成多项式系数的序列值的计算方法如下错误纠正等级错误纠正码字数错误纠正码字的计算先将错误纠正码字及临时变量及的值初始化为对于每一个码字对于每一个错误纠正码字计算每一个错误纠正码字的补数对于字符串其表示码字为符号的长度码字为那么有码字数目包括符号长度码字假定错误纠正等级为那么其计
27、算如下将初始化为GB/T 17172-1997 C3=(C2+t3)mod 929=(1 01 + 16)mod 929=117 t2=(t,X地)mod929=(l24X723)mod 929=468 t3=929-t,=929-468=461 C2=(c,+t3)mod 929=(876+461)mod 929=408 t2=(t,X,)mod 929=(124X568)mod 929=757 t3=929-t2=929-757=172 c,=(co+t3)mod 929=(1 77+172)mod 929=349 t2=(t,X。)mod929=(124X522)mod 929=627
28、t3=929-t2=929-627=302 co=t2mod 929=302 mod 929=302 t, = (d2+c3)mod 929= (178+ 117)mod 929=295 t2=(t,X问)mod929=(295X809)mod 929=831 t3=929-t2=929-831=98 C3=(c2+t3)mod 929=(408+98)mod 929=506 t2=(t,X电)mod929=(295X723)mod 929=544 t3=929-t2=929-544=385 C2= (c, +t3)mod 929= (349+385)mod 929=734 t3=929-t,
29、=929-340=589 t2=(t,X国)mod929=(5X809)mod 929=329 c, = (co+t3)mod 929= (302+589)mod 929=891 t2=(t,X。)mod929=(295X522)mod 929=705 t3=929-t2=929一705=224co=tamod 929=224 mod 929=224 t, = (d, +c3)mod 929= (121 +506)mod 929=627 t2=(t,X电)mod929=(627X809)mod 929=9 t3=929-t2=929-9=920 C3=(c2+t3)mod 929=(734+9
30、20)mod 929=725 t2=(t,X电)mod929=(627X723)mod 929=898 t3=929-t2=929-898=31 C2=(c,+t3)mod 929=(891 +31)mod 929=922 t2=(t,X,)mod 929=(627X568)mod 929=329 t3=929一t2=929-329=600c, = (co+ta)mod 929= (224+600)mod 929=824 t2=(t,X。)mod929=(627X522)mod 929=286 t3=929-t2=929-286=643 co=tamod 929=643 mod 929=643
31、 t, = (dO+c3)mod 929= (239+725)mod 929=35 t2=(t,X问)mod929=(35X809)mod 929=445 t3=929-t2=929-445=484 C3=(c2+t3)mod 929=(922+484)mod 929=477 t2=(t,X电)mod929=(35X723)mod 929=222 t3=929-t2=929-222=707 31 通过对上述结果求补可得到个错误纠正码字的值为符号的组配数据码字错误纠正码字一共有个码字我们可以排成或两种方式当然也可以排成其他方式但必须加入一些填充码字没用到的转移或锁定字符以便能填满整个矩阵以行每行个码字为例条码布局如下起始符终止符将所有码字填入矩阵可得到起始符终止符根据四一七条码符号的符号表示规则用三个不同的簇表示数据即每行所用簇号行号查表得到的条空形式见表所得条码符号见图表表示的四一七条码的条空组合形式本符号的参数为错误纠正个码字另加两个错误检测码字译码字符数码字数行数每行码字数图表示的四一七条码