刀刀网
您的当前位置:首页GS1-128 条形码标准

GS1-128 条形码标准

来源:刀刀网


UCC/EAN-12码及其应用

UCC/EAN-12码符号是ANCC系统(即EAN·UCC系统)中使用的一种条码符号,也是一种商品条码符号。UCC/EAN-12码是普通12码(即Code128码)的子集。经原国际物品编码协会(EAN)、美国统一代码委员会(UCC)和国际自动识别制造商协会(AIM)同意,把起始符后面的第一个字符是Code128码中的“功能1”(FNC1)字符的符号结构给EAN·UCC系统专门使用。

UCC/EAN-12码是EAN·UCC系统中唯一可用于表示附加信息的条码,可广泛用于非零售贸易项目、物流单元、资产、位置的标识。

今年,UCC/EAN-12码已被更名为GS1-12码。 1. UCC/EAN-12码的特点

·UCC/EAN-12码的编码字符集属于字母/数字式字符集。字符集中包括,ASCII码(美国信息交换标准码)中码值从00至127的128个码所代表的字符(这正是12码被称作Code128的原因)以及00至99这100个两位数字。其中的ASCII码字符包括,0~9这十个数字,全部英文大小写字母,“!”、“,”、“+”、“-”、“*”、“/”、“@”、“空格”等符号以及“DEL”、“ESC”等控制字符。但是UCC/EAN-12码不使用“空格”符号。

注:通过使用功能4(FNC4)字符,Code12码还能对ASCII值为128~255的字符编码,这一功能保留在将来使用,但UCC/EAN-12码不使用。

·UCC/EAN-12码使用一个起始符加一个FNC1字符的双字符起始图形,这是UCC/EAN-12码的特殊标志。

·除终止符外,每个条码字符由3个条和3个空构成。每个条或空由1~4个模块组成,每个条码字符的总模块数为11。UCC/EAN-128码属于模块组配的条码,又称“n,k”条码,即每个字符总模块数为11(n=11)、由3个条和3个空(k=3)组成。终止符由4个条和3个空构成。

·字符与字符是紧密相连的,不需要字符间隔,所以UCC/EAN-128码是连续型条码。

·UCC/EAN-128码是非定长的条码,字符的个数可根据实际需要确定,但是在符号的物理长度和数据字符的个数方面有一定的,即每个符号的最大物理长度为165mm、数据字符个数最多为48个。

·可双向译码,即从左至右或从右至左扫描都可以对UCC/EAN-128码译码。 ·有字符自校验功能。

·有一个必需的符号校验字符。但符号校验字符不是数据的一部分,不在供人识别字符中表示,也不在译码时输出。 2. 符号结构

UCC/EAN-12码符号由左侧空白区、一个起始符(Start A,Start B或Start C)和一个FNC1字符组成的双字符起始图形、数据字符(包括应用标识符)、一个符号校验字符、终止符、右侧空白区及供人识别字符组成,见图1。

1

左侧空白区 双字符起始图形 数据字符 校验字符(17) 终止符 右侧空白区

Start C FNC1

图1 UCC/EAN-12码的符号结构

供人识别字符

3. 符号字符的结构和编码

3.1 符号字符的结构

如前所述,除终止符外,每个条码字符由3个条和3个空构成。每个条或空由1~4个模块组成,每个条码字符的总模块数为11,示例见图2。

1 2 3

4 5

6

7 8 9 10

11

2 1 1 2 3 “Start C”字符

2 3 4 5 6 7

8 9 2

1 10 11

4 1 1 1 3 “FNC1”字符

3

4

5 6

7

8

9 10 1

1 2 11

1 3 1 3 2 1 符号字符值为35的字符 图2 符号字符的结构示例

3

4

5

6 7 8 9

10 11 12 13 终止符由4个条和3个空构成,共13个模块,见图3。

1 2 2

2 3

3 1 1 1 图3 终止符的结构

2

由符号字符的结构可见,每个符号字符中所有条的模块总数为偶数,所有空的模块总数为奇数,利用这一奇偶特性能够实现字符的自校验。 3.2 符号字符集

Code 128(UCC/ EAN-128)条码的符号字符集(部分节选)见表1。

表1 Code 128 符号字符集(部分节选)

符号 字符字符的字符 集A ASCII值 值 字符集A 字符集B 字符字符的集B ASCII值 字符集C 00 01 02 03 单元宽度 (模块数) 条 空 条 空 条 空 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 2 2 3 1 2 3 4 字符图形 0 1 2 3 空格 32 33 34 35 空格 32 33 34 35 5 6 7 8 9 10 11 ! \" # ! \" # 24 25 8 9 56 57 8 9 56 57 24 25 3 1 1 2 2 2 3 2 1 1 2 2 33 34 A B 65 66 A B 65 66 33 34 1 1 1 3 2 3 1 3 1 1 2 3 65 66 SOH STX 01 02 a b 97 98 65 66 1 2 1 1 2 4 1 2 1 4 2 1 98 99 100 SHIFT CODE C CODE B SHIFT CODE C 98 99 CODE B CODE A 4 1 1 3 1 1 1 1 3 1 4 1 1 1 4 1 3 1 3 1 1 1 4 1 FNC4 CODE A 101 FNC4 102 FNC1 103 104

FNC1 Start A Start B FNC1 4 1 1 1 3 1 2 1 1 4 1 2 2 1 1 2 1 4 3

符号 字符字符的字符 集A ASCII值 值 字符集A 字符集B 字符字符的集B ASCII值 字符集C 单元宽度 (模块数) 条 空 条 空 条 空 1 2 3 4 字符图形 105 Start C 5 6 7 8 9 10 11 2 1 1 2 3 2 单元宽度 (模块数) B S B S B S B 1 2 符号 字符集 字符值 A 字符集 字符集 B C 字符图形 3 4 5 6 7 8 9 10 11 12 13 — Stop(终止符) 2 3 3 1 1 1 2 Code 128(UCC/ EAN-128)条码有三个符号字符集,分别是字符集A、字符集B和字符集C。字符集A包括:ASCII值为00~95的字符,即所有大写英文字母、数字0~9、标点字符、控制字符;7个特殊字符。字符集B包括:ASCII值为32~127的字符,即所有大、小写英文字母、数字0~9、标点字符;7个特殊字符。字符集C包括:100个两位的数字字符00~99(这样每个符号字符可以表示两个数字);3个特殊字符。

虽然Code 128(UCC/ EAN-128)条码有三个符号字符集,但是实际上三个字符集共同使用着一套符号字符值和符号字符条空图形,也就是说,用一套符号字符条空图形来表示三个符号字符集的字符。例如在表1中,字符值为65的符号字符图形是“条空条空条空”的宽度(模块数)为“121124”的条空图形,它可以表示字符集A中的“SOH”、字符集B中的“a”和字符集C中的 “65”。为了能实现用一套符号字符图形来表示三个符号字符集的字符,需要使用一些起始定义字符、切换字符和转换字符来说明符号字符图形表示的是哪一个字符集的字符,表1字符值从98至105的字符中就有这样一些字符:

·起始符A(Start A)——定义符号以字符集A开始。 ·起始符B(Start B)——定义符号以字符集B开始。 ·起始符C(Start C)——定义符号以字符集C开始。

·切换字符(CODE A、CODE B、CODE C)——把先前定义的字符集切换到切换字符所定义的新的字符集。例如,CODE A切换到字符集A,依此类推。

·转换字符(SHIFT)——把紧跟其后的一个字符由字符集A转换到字符集B或由字符集B转换到字符集A,在被转换的那个字符后面的字符则自动恢复到转换字符之前定义的字符集A或B。

Code 128(UCC/ EAN-128)码的符号字符中有四个功能字符:FNC1、FNC2、FNC3和FNC4。FNC1的用途之一是紧跟在起始符Start(A或B或C)后面,形成特殊的Start(A或B或C)+ FNC1的双字符起始符号供UCC /EAN-128码专用,作为区分UCC /EAN-128码和普通128码的标志。FNC1的另一个用途是,当把多个应用标识符及其数据域放在一个条码符号中时,FNC1作为分隔符使用。FNC3(初始化)用于指示条码识读设备将包含此字符的数据视为初始化或对条码识读设备重新编程。FNC2(信息添加)和FNC4(扩展ASCII字符集)不在UCC·EAN系统中使用。

4

注:如果FNC1出现在起始符后面的第一个位置或在数字区域的第奇数个位置,将其视为2位数字,以确定合适的字符集。

除终止符外,Code 128(UCC/ EAN-128)码的每个符号字符都被赋予一个字符值,字符值可以在确定128码的符号校验字符的计算过程中使用。 3.3 符号编码规则

3.3.1 起始符、切换字符和转换字符的使用规则

由于UCC/ EAN-128码(或其它128码)有三个字符集可供编码使用,通过使用不同的起始、切换和转换字符的组合,可以对相同的数据有不同的符号编码表示。但是,编码有一个原则,就是应该使表示给定的数据时符号字符的个数最少,从而使符号的长度最小。例如,在对多位数字的数据进行符号编码时应优先采用字符集C,这样每两位数字可用一个符号字符编码,减少了符号字符的个数。

1、起始符(Start A、B或C)的确定

a) 如果数据以偶数位数字或4位以上的数字开始,用Start C。 b) 如果数据以ASCII控制字符开始,用Start A。 c) 其它情况下用Start B。

2、切换字符(CODE A、B或C)的使用

a) 如果使用了起始符Start C,且数据中连在一起的数字个数为奇数,应在最后一位数字前加入切换字符CODE A或CODE B。最后一位数字后面紧跟的是ASCII控制字符加入CODE A,否则加入CODE B。

b) 当采用字符集A或B,数据中出现4个或更多连在一起的数字时,若为偶数个数字则在第一个数字前插入CODE C;若为奇数个数字则在第一个数字后插入CODE C,切换到字符集C。

c) 当采用字符集C,数据中出现一个非数字字符时,应在该字符前加入切换字符CODE A或CODE B。该字符是ASCII控制字符加入Code A,否则加入CODE B。

3、转换字符(SHIFT)的使用

a) 当采用字符集B,数据中出现ASCII控制字符时,若该字符后有小写英文字母,则在该字符前插入转换字符SHIFT;否则在该字符前插入切换字符CODE A切换到字符集A。

b) 当采用字符集A,数据中出现小写英文字母时,若该小写字母后面、另一个小写字母前有ASCII控制字符,则在该小写字母插入转换字符SHIFT;否则在该小写字母前插入切换字符CODE B切换到字符集B。

如前所述,使用不同的起始、切换和转换字符的组合,可以对相同的数据有不同的符号编码表示。例如,对数据“(01)069012345672”进行符号编码,按照规则,用“Start C+FNC1+数据字符+校验符+终止符”是最佳方案,由此生成的条码符号见图1,但我们常常见到用“Start B+FNC1+CODE C+数据字符+校验符+终止符”的编码表示,这在EAN·UCC规范(GS1规范)中也屡见不鲜,这种编码生成的条码符号见图4。比较图1和图4的条码符号可见,两个符号的起始符不同;后一个符号比前一个多一个“CODE C”字符;两个符号的校验字符不同,前者为“17”,后者为“68”。两个符号使用的字符和字符个数有差异,经计算得出的校验字符值就可能不同,但由于校验字符不在供人识别字符中表示,也不在译码时输出,因此两个符号的供人识别字符及译码结果都相同。但是后一种编码表示比前一种多用了一个字符,并且有“多此一举”之嫌。究其原因,是编制者认为“FNC1”是非数字字符,“FNC1”不可在字符集C中使用,因此要以“Start B”开始。其

5

实我们看字符集便知,“FNC1”是三个字符集都有的字符,而且从3.2中的注可知,“FNC1”通常是被当作2位数字对待的,它当然可以在字符集C中使用。

同一数据可能有不同的12码符号编码表示,这常常使刚接触12码的人迷惑不解。了解了上述编码原理就不难理解了。正像用各种方法都能正确解答同一道数学题一样,各种符号编码表示只要能正确地表示数据、能正确被译码,我们就不能评价哪一种对、哪一种错,只能说哪一种更简捷。

图4 相同的数据(同图1中)、不同的符号编码表示

3.3.2 单元数据串的编码规则

如前所述,UCC/EAN-128码是非定长的条码,除了可表示贸易项目的标识(如全球贸易项目代码)外,还可用于表示批号、生产日期、贸易计量(重量、尺寸、体积等)、保质期等各种附加信息,从而广泛用于非零售贸易项目、物流单元、资产、位置的标识。诸如贸易项目标识、批号、生产日期等这样的在结构和意义上已经定义了的一条数据即单元数据串。每个单元数据串由一个标识部分(前缀码或应用标识符)和一个数据部分组成。例如,“(01)069012345672”是表示定量贸易项目标识的单元数据串;“(11)060818”是表示生产日期的单元数据串,其中圆括号中的数字是应用标识符,圆括号后的数据是数据部分。

在供人识别字符中,应该用圆括号把应用标识符括起来,以便于识读,但这些圆括号不是数据的一部分,不应在12码中编码表示这些圆括号。

在把多个单元数据串编码于一个12码中时,要遵循“先预定义长度单元数据串,后可变长度单元数据串”的原则。所谓预定义长度单元数据串是指那些预先设定了数据串长度且长度不变的单元数据串,如贸易项目标识、生产日期等单元数据串,这些单元数据串使用的应用标识符(前两位)和字符总数见表2。预定义长度单元数据串的后面不需要插入分隔符(FNC1字符);非预定义长度单元数据串(即可变长度单元数据串)的后面则必须插入分隔符,但12码中最后一个单元数据串的后面不需要插入分隔符。“先预定义长度单元数据串”的目的就是为了要减少分隔符的用量。

表2 预定义长度单元数据串的应用标识符及字符总数

应用标识符 (前两位) 00 01 02 03﹡ 04﹡

数据串字符总数 (含应用标识符) 20 16 16 16 18 6

应用标识符 (前两位) 17 18﹡ 19﹡ 20 31 数据串字符总数 (含应用标识符) 8 8 8 4 10 11 12 13 14﹡ 15 16﹡ 8 8 8 8 8 8 32 33 34 35﹡ 36﹡ 41 10 10 10 10 10 16 注:打﹡号的是预留的、尚未分配的应用标识符。 ·链接 所谓链接即在符号编码时把两个以上的单元数据串连在一起。链接时按照“预定义长度单元数据串的后面不加分隔符(FNC1字符),可变长度单元数据串的后面加分隔符”的规则进行处理,然后看数据串接合部是否需要进行字符集的转换(注),再把各单元数据串连接在一起即可。还要注意:最后一个单元数据串后面不加分隔符;形成的条码符号,数据字符的个数不超过48个,物理长度不大于165mm。

(注):在这方面我们又看到“多此一举”的例子(见GS1规范5.3),在两个均使用字符集C的可变长度单元数据串“单价365”和“批号123456”之间加入“CODE B+FNC1+CODE C”,再进行链接。其实只需加入“FNC1”即可,原因请读者自行分析。

4 标准译码算法

UCC/EAN-12码的标准译码算法用测量符号字符中相邻两个条的同侧边(相似边)之间距离、然后判断同侧边之间距离中所包含的模块宽度的个数的方法进行译码。除终止符外,每个条码字符由3个条和3个空构成,因此每个字符有4个需要测量的同侧边之间距离e1~e4(见图5),每个字符的e1~e4相应的4个依次排列的模块宽度数具有区别于其他字符的特征,根据这种特征就可以确定字符的值。译码过程要求同侧边之间距离出现的偏差不超过±0.5个模块宽度(0.5p/11)。由于终止符由4个条和3个空构成,译码时只取终止符从左至右的6个单元即3个条和3个空(从左至右扫描时)或从右至左的6个单元(从右至左扫描时)进行上述测量、判断。

如前所述,每个符号字符中所有条的模块总数为偶数,标准译码算法利用这一特性来进行字符的自校验:求出被译码的符号字符中3个条应有的模块总数V,测量该字符中3个条的宽度之和(b1+ b2+ b3)及字符宽度p,核对式子

(V–1.75)p/11<( b1+ b2+ b3) <(V+1.75)p/11是否成立,如果不成立则字符是错误的。 b3 b2 b1

e1 e3

e4 e2 p

图5 符号字符与译码有关的尺寸

5 符号尺寸要求

7

UCC/EAN-12码符号的X尺寸(设计模块宽度)应在0.250mm~1.016mm范围内,在一个给定的符号中X尺寸应为一个定值。

UCC/EAN-12码符号左、右空白区的最小宽度均为10X。 UCC/EAN-12码符号的条高通常情况下为32mm。 UCC/EAN-12码符号的长度不能超过165mm。 6 符号检测方法和质量要求

采用GB/T 14258-2003《条码符号印制质量的检验》中规定的方法进行检测。要注意的是:对空白区宽度的检测结果要进行分级,空白区宽度够(≥10Z,Z为印制的条码符号的实际模块宽度)评为4级;空白区宽度不够(<10Z)评为0级。空白区宽度的等级还要参与符号等级的评定。

可译码度值的检测、计算方法如下:

各条码字符与字符中相邻两条左、右同侧边缘之间距离相关的可译码度值V1按公式(1)计算。

V1eRT的最小值 ······································ (1) ijp/22式中:

ei——字符中相邻两条左、右同侧边缘之间距离(i=1,2,3,4)e1、e2、e3、e4

的测量值;

RTj——标准阈值(j=1,2,3,4,5,6,7),其中RT1=1.5p/11、RT2=2.5p/11、

RT3=3.5p/11、RT4=4.5p/11、RT5=5.5p/11、RT6=6.5p/11、RT7=7.5p/11; p——相应字符的宽度的测量值。

各条码字符与字符中条的宽度总和相关的可译码度值V2按公式(2)计算。

V21.75Wb11/pM1.75 ································ (2)

式中:

Wb——字符中条的宽度总和的测量值; p——相应字符的宽度的测量值; M——字符中条的模块数。

注:由于终止符比其它条码字符多一个终止条,终止符的可译码度值V1和V2都需要计算两

次,第一次使用从左至右的6个单元,第二次使用从右至左的6个单元,取两次计算值中的较小者。

各条码字符的可译码度值为相应的V1值、V2值中的较小者。

扫描反射率曲线的可译码度为该扫描反射率曲线所有条码字符的可译码度值中的最小值。

UCC/EAN-12码符号的符号等级应不低于1.5/10/670。

8

因篇幅问题不能全部显示,请点此查看更多更全内容