EAN-128条码

发布时间: 2015-10-10 08:35 浏览次数: 68 字号:

EAN-128码,现称GS1-128码,是专用于GS1系统中的条码,可以标注商品的附加信息,在商品信息的标识、产品的跟踪与追溯中有广泛的用途。

EAN-128码来自于Code128码,在字符集、条空规则上与Code128码完全一致,因此我们需要先来介绍一下Code128码。

Code128码是一种用模块组配法编制的条码,三套字符集共可以表示128个符号,故称128码,字符集包含数字,大小写英文字母、符号、控制符和00-99的100个双位数的数字。每个字符的条码符号由三条三空11个模块组成,终止符为四条三空13个模块。下图是三个字符集的字符与条空结构对照表。由图中可以看出,与商品条码的三个子集不同,三个字符集共用一套条空结构,每一个字符集都有107个符号,每一个符号都有一个字符值。字符集A和字符集B中的字符大部分是重叠的,只有字符值64以后的符号不同,字符集A中包含了控制符,而字符集B中包含了小写字母;字符集C除了最后七个辅助字符外,只包含了100个双位数的数字,由00-99,其对应的字符值与字符本身相同。

Code128字符集

Code128码的编码规则:一个Code128条码由左空白区、起始符、数据字符、校验符、终止符、右空白区和供人识读的字符构成。

1、起始符有三个,分别是START A,START B和START C,起始符说明了该条码中的数据使用的字符集。当表示的数据是四个或四个以上连续的数字时,必须使用START C,以缩短条码的长度。

2、校验符由起始符和数据区的字符值决定,其计算方法参见之前的《校验码的计算》一文。Code128码的校验符是条码本身的特性,它不是数据的一部分,因此校验符不会在供人识读的数据中出现。

3、终止符STOP由四条三空13个模块构成,三个字符集的终止符是同一个符号。

由于字符集B中包含了比较丰富的字符,所以表示由英文字母和符号构成的数据时通常都会选用B字符集,如果只用大写字母则选字符集A和字符集B是一样的。

编码示例:(1)BEIJING'08   (2) GS1-CHINA   (3)20091020

(1) |START A| B | E | I | J | I | N | G | ' | 0 | 8 |校验符|STOP|   (使用A字符集)

把以上字符对应的条空结构连接起来就构成了一个表示BEIJING'08的条码符号。

(2) |START B| G | S | 1 | - | C | H | I | N | A |校验符|STOP|  (使用B字符集)

(3) |START C|20|09|10|20|校验符|STOP|   (使用C字符集)

*注意使用C字符集的(3)与使用A字符集的(1)中表示数字的不同点,AB字符集只能表示单个的数字,而C字符集每一个条码符号都表示2位数字。

Code128条码允许在条码中间改变使用的字符集,这个功能依靠另外三个辅助字符来完成:CODE A,CODE B,CODE C。例如POSTCODE450002用128条码表示:

|START A| P | O | S | T | C | O | D | E | 4 | 5 | 0 | 0 | 0 | 2 |校验符|STOP|

全部使用A字符集,一共要使用17个码字。如果把数字部分改用C字符集就会缩短条码的长度,使用15个码字:

|START A| P | O | S | T | C | O | D | E |CODE C| 45 | 00 | 02 |校验符|STOP|

另一个辅助字符SHIFT可以使其后的一个字符从字符集A进入字符集B或从字符集B进入字符集A,之后的第二个字符及以后的符号仍然回到原字符集,它不能进入或退出字符集C。例:

|START B| C | h | i | n | a |SHIFT| CR | W | o | r | l | d |校验符|STOP|

该条码在阅读时可以产生以下效果:

China

World

原因是SHIFT让其后的一个字符CR使用了字符集A,而CR是计算机中的回车键,即在读出China后产生一个回车键再读World。

国际物品编码协会(EAN)和美国统一代码委员会(UCC)将Code128码引入EAN/UCC系统,并作如下规定:起始符由一个START A/B/C加一个辅助字符FNC1构成,以区别普通的Code128条码。EAN-128码仍然是非定长条码,每一个条码符号可表示的数据最少3位,最多32位,并且构成条码的码字数量不超过48个,整个条码的物理长度不超过165毫米。一个标准模块的宽度为1毫米,放大系数为0.25~1.2。

EAN-128码的编码规则

EAN-128码在表示数据的方法上采用了应用标识符系统(Application Identifier,简记为AI),使得EAN-128条码成为一种有含义的条码。应用标识符由2位到4位数字组成,每一组应用标识符数字的含义是预先定义好的,用来说明其后面的数字表示的内容。例如:应用标识符01表示贸易项目代码,10表示批号,11表示生产日期,13表示包装日期,15表示保质期等,则以下信息便可以只从数字上作出明确解释:

(01)16903128100250(11)091020(10)091050表示贸易项目代码为16903128100250,该批产品的生产日期为2009年10月20日,批号为091050;

(01)16903128100250(13)091020(15)100420表示贸易项目代码为16903128100250,该产品包装日期为2009年10月20日,保质期到2010年4月20日。

上面示例中应用标识符都放在括号中,是为了方便人眼识读,在条码中表示的时候是不使用括号的,目的是为了最大限度地减小条码的长度以便更多地表示数据内容。为了能区分各组数据的内容,要在每组数据之间插入一个分隔符,最后一组数据后不加分隔符,分隔符使用码字FNC1,译码后的数据以(ASCII码值为29的字符)表示分隔符。如上面的第一条数据用条码可以表示为:

|START C|FNC1|01|16|90|31|28|10|02|50|FNC1|11|09|10|20|FNC1|10|09|10|50|校验码|STOP|

一个条码中包含的数据组数越多,加入的分隔符就越多,也会增加条码的长度。为了进一步缩短条码的长度,又采取了对常用的应用标识符预定义长度的措施,预定义长度的应用标识符见下表:

EAN-128应用标识符

*带括号的数字是预定义了长度但还没有定义含义的应用标识符

如果数据中的应用标识符使用的是预定义长度的AI,则可以省去数据后的分隔符,如下面的例子:

例1(01)16903128100250(13)091020(15)100420 用条码可以表示为:

|START C|FNC1|01|16|90|31|28|10|02|50|13|09|10|20|15|10|04|20|校验码|STOP|

再看另外一个例子:

例2(02)16903128100250(37)100(10)091000S

|START C|FNC1|02|16|90|31|28|10|02|50|37|10|CODE B| 0 |CODE C|FNC1|10|09|10|00|CODE B|S|校验符|STOP|

因为(02)是预定义长度的应用标识符,所以(37)前不用加分隔符,而37是未定义长度的应用标识符,所以(10)前必须增加一个分隔符FNC1,
正是因为EAN-128以上的这些特点,使得128条码具有灵活性和多样性,相同的数据可以使用不同的编码规则,一般来说,使相同的数据生成的条码最短的是最优方案。但由于软件设计者的思路不同,即使条码长度完全一样,条码的条空结构也会不同,这也正是很多做条码的朋友感到困惑的地方。例如上面的例2,可以做成下面两种不同的条码:

|START C|FNC1|02|16|90|31|28|10|02|50|37|10|CODE B| 0 |CODE C|FNC1|10|09|10|00|CODE B|S|校验符|STOP|

|START C|FNC1|02|16|90|31|28|10|02|50|37|10|CODE A| 0 |FNC1|CODE C|10|09|10|00|CODE A|S|校验符|STOP|

两个条码的长度完全相同,扫描结果也完全相同,但条码符号中却有5处条空结构不同。有了上面的知识,我们不难理解,这两个条码符号都是最优方案。

欢迎联系我们咨询相关业务
微信二维码