射频识别(RFID)技术

EPC标签数据标准-3

译者:陈广
日期:2021-1-2

Gen 2 RFID标签的内存组织结构

标签数据类型

RFID标签,尤其是Gen 2 RFID标签,可以装载三种不同种类的数据:

  • 商业数据:描述标签附加到物理对象上的信息。这些信息包括唯一标识物理对象的电子产品代码(EPC),还可以包括标签上携带的其它数据元素。这些信息是商业应用程序产生的,因此典型的执行体系中,这些数据通常在数据捕获级别用商业应用级别传输。RFID标签上的大多数标准数据与其他数据载体(如条形码)中找到的业务数据相同。

  • 控制信息:数据捕获应用程序使用的信息用于帮助控制与标签交互的过程。控制信息:包括帮助捕获应用程序从大量标签中进行筛选,以提高读取效率的信息;影响捕获应用程序行为的特殊处理信息;控制标签安全特性的信息,等等。控制信息通常不会直接传递给商业应用程序,尽管控制信息可能会影响捕获应用程序如何将商业数据呈现给商业应用程序。与商业数据不同,控制信息在条形码或其它数据载体中没有等价数据。

  • 标签出厂信息:描述标签本身的信息,而不是标签附加到物理对象上的信息。标签出厂信息包括生产ID和指示标签种类的代码。它还可以包括描述标签功能的信息,以及在制造时分配的唯一序列号。通常,标签出厂信息和控制信息一样,它被捕获应用程序使用,而不是直接传递给商业应用程序。在某些应用程序中,唯一序列号可能作为标签出厂信息的一部分附加到EPC中,所以行为类似于商业数据。与控制信息一样,标签出厂信息在条形码或其它数据载体中没有等价数据。

应当注意的是,这些评价有些主观,在某些应用中,观点可能是模糊的。尽管如此,它们对于理解标签数据标准的构造是非常有用,并且对于有效和正确地使用数据是有意义的。

下表对上述信息进行了总结:

信息类型 描述 Gen 2 标签中的位置 典型应用 等价于条码
商业数据 描述标签附着的物理对象 EPC区(除EPC中的PC、XPCD位以及过滤值外)
用户内存区
数据捕获层和商业应用层 有:GS1键、应用标识符(AI)
控制信息 促进有效的标签交互 保留区
EPC区:EPC中的PC、XPC位及过滤值
数据捕获层
标签出厂信息 描述标签本身,而不是标签附着的物理对象 TID区 数据捕获层
唯一的标签出厂序列号可到达商业应用层
表 9-1:Gen 2 RFID标签中的数据种类

Gen 2 标签内存映射

标签数据标准中定义的二进制数据结构用于RFID标签,尤其是UHF Class 1 Gen 2 标签(也称为ISO 18000-6C标签)。空中接口标准[UHFC1G2]规定了Gen 2标签内存的结构,尤其是,它规定了这些标签的内存由四个单独的寻址区组成,编号为:00、01、10和11。它还规定了每个区的用途,以及空中接口行为决定的对每个区的内容的限制。例如,保留区(00区)的布局和含义,其中包含了控制某些空中接口命令的密码,在[UHFC1G2]中完全指定。

对于那些对空中接口没有特殊含义的内存区和内存位置(即,就空中接口而言,只是“数据”),标签数据标准指定这些内存位置的内容和含义。

在[UHFC1G2]中建立约定之后,使用16-bit数据描述内存地址,每个区以$00_h$开始,并向上扩展到每个区包含的最多位,每个区的容量在某些方面受到[UHFC1G2]的限制,但最终可能随着每个标签的制作和模型而变化。位$00_h$被认为是每个区的最高位,当二进制字段被放置到标签内存中时,任何给定字段的最高位占据该字段所占用的最低编号位地址。然而,在描述单个字段时,最低位被编号为0。例如,访问密钥是由 $b_{31} b_{30} ... b_0$ 组成的32-bit无符号整数,其中,$b_{31}$为最高位,$b_0$为最低位。当访问密钥存储在Gen 2 标签的保留区地址$20_h - 3F_h$(包括)时,最高位$b_{31}$存储在标签地址$20_h$,最低位$b_0$存储在地址$3F_h$中。

下图显示了Gen 2标签的内存区,颜色指示图3-1中分类后数据类型。

图 9-1:Gen 2 标签内存映射

下表描述了以上内存映射的各个区域信息。

区域 描述 种类 出处
Bank 00
(保留)
00h - 1Fh 灭活密码 必须存在于标签的32-bit密码,用于完成Gen 2的“Kill”命令。 控制信息 [UHFC1G2]
20h - 2Fh 访问密码 必须存在于标签的32-bit密码,用以执行特权操作。 控制信息 [UHFC1G2]
Bank 01
(EPC)
00h - 0Fh CRC 16-bit循环冗余校验码,根据EPC区内容进行计算 控制信息 [UHFC1G2]
10h - 1Fh PC 位 协议控制位(见下文) 控制信息 (见下文)
20h - 结尾 EPC 电子产品代码加上过滤值,产品电子代码是标签所附着物理对象的全局唯一标识符。过滤值提供了一种通过选择感兴趣标签子集来提高标签读取效率的方法。 商业数据(除了过滤值,它是控制信息) EPC在6、7和13节定义。过滤值在第10节定义。
210h - 21Fh XPC 位 扩展协议控制位。如果EPC区的16h位设置为1,则210h - 21Fh(包含)则包含了[UHFC1G2]中指定的附加协议控制位。 控制信息 [UHFC1G2]
Bank 10
(TID)
00h - 结尾 TID 位 标签标识位,它提供标签本身的信息,而不是标签所附着物理对象的信息。 标签出厂信息 第16节
Bank 11
(User)
00h - 结尾 DSFID 逻辑上,用户内存的内容是一系列名称-值对,名称部分是一个OID[ASN.1],值是一个字符串。物理上,前几位是[ISO15961] 和[ISO15962]中指定的数据存储格式标识符。DSFID指定了用户内存区其余部分的格式。DSFID通常长度为8位,但可以按照[ISO15961]中的规定进一步扩展。当DSFID指定访问方法 2 时,用户内存的其余部分的格式是第17节中指定的“打包对象”。此格式推荐用于EPC应用程序。打包对象数据格式中的物理编码是一个“打包对象”序列,其中每个打包对象包括一个或多个名称-值对,其值被压缩在一起。 商业数据 [ISO15961],[ISO15962],第17节
表 9-2:Gen 2 内存映射

下图更详细地说明了EPC区(Bank 01)的前几位,特别显示了协议控制位(位10h - 1Fh,包含)中的各个字段。

图 9-2:Gen 2 协议控制(PC)位内存映射

下表说明了PC位的含义:

字段 描述 出处
10h-14h 长度 表示包含PC字段和EPC字段的16-bit字的数量(见下文)。参考15.1.1节对此字段编码的讨论 [UHFC1G2]
15h 用户内存指示(UMI) 指示用户内存是否存在及包含数据 [UHFC1G2]
16h XPC指示(XI) 指示是否存在XPC [UHFC1G2]
17h 切换位 如果为 0,指示一个EPCglobal应用;尤其,指示18h-1Fh位包含属性位,EPC区的其余部分包含二进制编码的EPC。
如果为 1,指示非EPCglobal应用;尤其指示18h-1Fh包含[ISO15961]定义的ISO应用类型识别码(AFI),并且EPC区剩余部分包含适合该AFI的唯一项目标识符(UII)
[UHFC1G2]
18h-1Fh(如果切换位=0) 属性位 可以指导如何处理标签所贴物理对象。(仅适用于Gen2 v 1.x标签。) 第11节
18h-1Fh(如果切换位=1) AFI 一个应用类型识别码,指示EPC区的剩余部分被编码为非EPCglobal应用 [ISO15961]
表 9-3:Gen 2 协议控制(PC)位内存映射

$17_h - 1F_h$(包含)统称为数字系统标识符(Numbering System Identifier,NSI)。然而,应该注意的是,当切换位($17_h$位)为零时,数字系统总是电子产品代码,位$18_h - 1F_h$所包含的属性位的作用与识别正在使用的数字系统完全无关。

过滤值

过滤值是可能包含在Gen 2标签的EPC内存区中的附加控制信息。过滤值的预期用途是允许RFID读写器选择或取消选择与某些物理对象对应的标签,使得在可能存在其他标签的环境中更容易读取所需的标签。例如,如果目标是读取托盘上的单个标签,预计可能会有数百或数千个项目级别标签存在,通过使用Gen 2 空中接口选择托盘标签且不选择项目级别标签,可以提高捕获应用程序的性能。

过滤值可用于所有EPC类型,除了通用标识符(GID)。有一组不同的标准化过滤器值与每种类型的EPC相关联,见下文。

必须要理解过滤值是额外的“控制信息”,而不是电子产品代码的一部分。过滤值对于EPC的唯一标识没有作用。例如,不允许将两个具有相同EPC的RFID标签附着到不同的物理对象上,即使两个标签上的过滤值不同。

由于过滤值并非EPC的一部分,当EPC表示为纯标识URI时,过滤值不包含在内,也不应将过滤值视为商业应用EPC的一部分。然而,捕获应用程序可以读取过滤值,并将其部分数据字段而不是EPC向上传递到业务应用程序。然而,应该认识到,过滤值的目的是为数据捕获过程提供帮助,在大多数情况下,过滤值对业务应用程序是有限的或没有价值的。过滤值不打算为业务应用程序提供可靠的包装级别指示。

使用“保留”和“所有其它”过滤值

在以下面部分中,标记为“保留”(reserved)的过滤值保留给EPCglobal在本规范的未来版本中分配。此处指定的编码与解码规则的实现应接收过滤值的任何值,无论“保留”与否。然而,应用程序不应指示编码器将保留值写入标签,也不应依赖从标签解码的保留值,因为如果在今后对本规范的修订中分配了保留值,这样做可能会导致互操作性问题。

每个EPC scheme都包括一个被标记为“所有其他”(All Others)的过滤值。此过滤值意味着标签所贴对象与为该EPC scheme定义的任何其他过滤值的描述不匹配。在某些情况下,“所有其他”过滤值可能出现在被编码以符合本规范的早期版本的标签上,此时没有其他合适的过滤值可用。在对新标签进行编码时,应将过滤值设置为与标签所贴对象的描述相匹配,只有当本规范中没有为对象定义合适的过滤值时,才使用“所有其他”。

SGTIN EPC标签的过滤值

下面指定了SGTIN EPC标签过滤值的标准规范。

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
销售点(POS)贸易项目 1 001
运输满箱* 2 010
保留(参考10.1节) 3 011
内包装贸易项目分组处理 4 100
保留(参考10.1节) 5 101
单元货物 6 110
单位内部贸易项目或组件内的产品,不打算单独销售 7 111
表 10-1:SGTIN过滤值

* 在为一个SGTIN使用EPC过滤值时,“运输满箱”表示一个箱子或纸箱,其多个POS贸易项目的组成通过主数据标准化,并可通过引用单个GTIN以使用相同配置(重新)订购。

** 在为一个SGTIN使用EPC过滤值时,“单元货物”指托盘或其他类型载货设备(例如手推车、手提包、衣架、袋子、麻袋等等)上包含的一个或多个贸易项目,其适合作为一个单元进行运输、堆放和储存,其组成通过主数据标准化,并可通过引用单个GTIN以使用相同配置(重新)订购。

SSCC EPC 标签的过滤值

下面指定了SSCC EPC标签过滤值的标准规范。

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
运输满箱* 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
单元货物 6 110
保留(参考10.1节) 7 111
表 10-2:SSCC过滤值

SGLN EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-3:SGLN过滤值

GRAI EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-4:GRAI过滤值

GIAI EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
铁路车辆 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-5:GIAI过滤值

GSRN 和 GSRNP EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-6:GSRN 和 GSRNP过滤值

GDTI EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
旅行证件* 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-7:GDTI过滤值

* 旅行证件是由政府或国际公约组织签发的身份证件,以便利个人跨越国际边界的流动。

CPI EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-8:CPI过滤值

SGCN EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-9:SGCN过滤值

ITIP EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000
保留(参考10.1节) 1 001
保留(参考10.1节) 2 010
保留(参考10.1节) 3 011
保留(参考10.1节) 4 100
保留(参考10.1节) 5 101
保留(参考10.1节) 1 110
保留(参考10.1节) 7 111
表 10-10:ITIP过滤值

GDI EPC 标签的过滤值

GDI EPC scheme没有规定使用过滤值。

DOD EPC 标签的过滤值

US DoD EPC标签的过滤值在[USDOD]中指定。

ADI EPC 标签的过滤值

类型 过滤值 二进制值
所有其他(参考10.1节) 0 000000
项目,但过滤值8~63适用的值除外 1 000001
纸箱 2 000010
保留(参考10.1节) 3~5 000011 ~ 000101
托盘 6 000110
保留(参考10.1节) 7 000111
汽车坐垫 8 001000
座套 9 001001
座椅安全带 10 001010
厨房,厨房推车和其他厨房服务设备 11 001011
单位装载设备,货物集装箱 12 001100
飞机安全物品(救生衣盒,后厕所墙壁,厕所天花板通道舱口) 13 001101
救生衣 14 001110
氧气发生器 15 001111
发动机部件 16 010000
航空电子设备 17 010001
实验(“飞行试验”)设备 18 010010
其他应急设备(烟雾面罩、PBE、碰撞轴、医疗包、烟雾探测器、手电筒、安全卡等) 19 01011
其他可旋转设备; 例如:线路或可更换底座 20 010100
其他可修复的 21 010101
其他机舱内面 22 010110
其他修理(不包括部件);例如,结构项目修理 23 010111
乘客座位(结构) 24 011000
飞行娱乐系统 25 011001
保留(参考10.1节) 26~55 011010 ~ 110111
位置标识符(*) 56 111000
文档 57 111001
工具 58 111010
地面保障设备 59 111011
其他不可飞行设备 60 111100
保留供公司内部使用 61~63 111101 ~ 111111
表 10-11:ADI过滤值

非标准提示:当将过滤值分配给标记部件时,选择的过滤值应该尽可能具体。例如,雷达黑匣子的过滤值更好的选择是17(航空电子设备),而不是更普遍的20类(其他可旋转设备)。另一方面,由于17(航空电子设备)不准确,因此20(其他可旋转部件)的过滤值适用于飞机前锥中的雷达天线。

* 位置标识符的作用可能不同于项目“标识”标签,因为它标识了可能被其他物品引用的位置。因此,一个物品可能有一个标识标签,但也有一个位置标签。一个例子可能是飞机的一个特定部分,甚至是整个飞机。

非标准提示:“位置”的一个例子可以是一个特定的飞机“尾号”。例如,XYZ航空公司有一个拥有200架737的机队,内部配置相同,一旦你进入其中,你就无法分辨你在哪一架737。这家航空公司想放置带有编码尾号的RFID“位置标记”,并将其放置在乘客门或货舱门内。门可能有两个标签,一个是门本身的,例如它有门的零件号,序列号,和其他东西,另一个标签用于“位置”。

属性位

本节仅适用于 Gen2 v 1.x 标签。

属性位是8-bit的“控制信息”,被捕获应用程序用于指导捕获过程。属性位可用于决定标签所附着的物理对象是否需要任何形式的特殊处理。

属性位对于所有的EPC类型可用。无论使用哪种EPC scheme,下面指定的属性位定义都适用。

必须理解,属性位是附加的“控制信息”,不属于电子产品代码的一部分。属性位不构成EPC的唯一标识。例如,不允许将两个包含相同EPC的RFID标签附加到两个不同的物理对象,即使两个标签上的属性位不同。

因为属性位不是EPC的一部分,当EPC表现为纯标识URI时,属性位不包含在内,业务应用程序也不应将属性位视为EPC的一部分。然而,捕获应用程序可能读取属性位,并将它们向上传递给商业应用程序的某些数据字段而不是EPC。但是,应该认识到,属性位的目的是协助数据捕获和物理处理过程,在大多数情况下,属性位对业务应用程序的价值有限或没有价值。属性位的目的不是为业务应用程序提供可靠的主数据或产品描述属性。

当前分配的属性位如下所示:

位地址 分配为TDS版本 含义
18h 未分配
19h 未分配
1Ah 未分配
1Bh 未分配
1Ch 未分配
1Dh 未分配
1Eh 未分配
1Fh 1.5 置1表示标签附着于危险物料;置0表示未提供这样的指示
表 11-1:属性位分配

上表中,属性位标记为“未分配”表示保留给EPCglobal未来在此规范中进行分配。本文规定的编码和解码规则的实现应接受属性位的任何值,无论是否未分配。然而,应用程序应该指示编码器为每个未分配的位写一个零,并且不应该依赖从标签解码的未分配位的值,因为如果在本规范的未来版本中分配了“未分配”值,这样做可能会导致互操作性问题。

EPC Tag URI 和 EPC Raw URI

Gen 2 标签的EPC内存区包含了二进制编码的EPC以及其它控制信息。应用程序通常不直接处理二进制数据。应用程序希望读取的可能是第6节定义的Pure Identity EPC URI形式的EPC。然而,在其它情况下,捕获应用程序可能对标签上的控制信息以及EPC感兴趣。另外,写EPC内存区的应用程序需要指定与EPC一起写入的控制信息的值。在这两种情况下,可以使用EPC Tag URI和EPC Raw URI。

EPC Tag URI指定EPC内存区中EPC和控制信息的值。它还指定要使用几种变体二进制编码方案中的哪一种(例如:在SGTIN-96和SGTIN-198中选择)。因此,EPC Tag URI完全并唯一地指定了EPC内存区中的内容。EPC Raw URI也指定EPC内存区的完整内容,但将内存内容表示为单个十进制或十六进制数字。

EPC Tag URI 和 EPC Raw URI 的结构

EPC Tag URI以urn:epc:tag:开始,当EPC内存区包含有效的EPC时使用。EPC Tag URI类似于Pure Identity EPC URI,但增加了控制信息。EPC Raw URI以urn:epc:raw:开始,在EPC内存区未包含有效EPC时使用。这包括切换位(位$17_h$)设置为1的情况,以及切换位设置为0但EPC区的其余部分不符合第14节中规定的编码规则的情况,要么是因为首部位未分配,要么是二进制编码的剩余部分违反了对该首部的有效性检查。

下图演示了这些URI的形式:

图 12-1:EPC Tag URI 和 EPC Raw URI 图解

图中的第一种形式,EPC Tag URI,用于有效的EPC。它类似于Pure Identity EPC URI,添加了第12.2.2节中指定的可选控制信息字段和(非可选)过滤值。EPC scheme名称(上图为sgtin-96)指定了特定的二进制编码结构,因此它包括编码的长度。这与Pure Identity EPC URI相反,后者标识EPC scheme,而不是特定的二进制编码(例如sgtin,但不是特定的`sgtin-96)。

图中的第二种形式为EPC Raw URI,可以在切换位(位$17_h$)为零时使用,但通常仅当第一种形式不可用时使用(也就是,如果EPC区中的内容无法按照14.3.9节进行解码时)。它将第$20_h$位之后的内容指定为单个十六进制数字。这个数字中的位的数量是由标签的EPC区中的“长度”字段(位$10_h - 14_h$)决定的。(第12.4节中的语法包括这种形式的变体,其中内容被指定为十进制数字,此形式已弃用。)

图中的第三种形式为EPC Raw URI,当切换们(位$17_h$)为1时使用。它和第二种形式类似,但是在长度和有效负载之间有一个附加字段,它以十六进制数字的形式报告AFI字段的值(位$18_h – 1F_h$)。

每种形式均由14.5.13节指定的编码和解码过程完全定义。

控制信息

EPC Tag URI 和 EPC Raw URI指定了Gen 2 EPC内存区的所有内容,包括过滤值、属性位等控制信息。本节指定如何在这些URI中包含控制信息。

过滤值

过滤值仅在EPC区包含一个有效EPC,且EPC是除GID之外的EPC scheme时可用。在EPC Tag URI中,过滤值表示为 scheme 名称之后、EPC其余部分之前的附加字段,如下图所示:

图 12-2:EPC Tag URI 过滤值 图解

过滤值是一个十进制整数。过滤值的可用值在第10章指定。

其它控制信息字段

除了过滤器之外,EPC区中的控制信息与EPC分开存储。使用下面描述的名称-值对语法,这些信息可以在EPC Tag URI 和 EPC Raw URI中表示。

在这两种URI形式中,控制字段名-值对可能出现在urn:epc:tag:urn:epc:raw:之后,如下图所示:

urn:epc:tag:[att=x01][xpc=x0004]:sgtin-96:3.0614141.112345.400
urn:epc:raw:[att=x01][xpc=x0004]:96.x012345689ABCDEF01234567

方括号中的每个元素指定一个控制信息字段的值。省略的字段相当于指定值为零。作为一种限制性的情况,如果URI中没有指定控制信息字段,则相当于为所有字段指定一个0值。这提供了与早期版本的标签数据标准的向后兼容性。

可用控制信息字段在下表中指定:

字段 语法 描述 读/写
属性位 [att=xNN] 属性位(位18h-1Fh)的值是一个2-bit十六进制数字NN
此字段仅在切换位(位17h)为0时可用。
读/写
用户内存指示 [umi=B] 用户内存指示位(位15h)的值B为0或1。 读/写
注意,某些Gen 2标签可能忽略写入此位的值,而是通过用户内存中的内容计算此位的值。参考[USHC1G2]。
扩展PC位 [xpc=xNNNN] XPC位(位210h ~ 21Fh)的值是一个四位十六进制数字NNNN 只读
表 12-1:控制信息字段

用户内存指示和扩展PC位由标签计算而来,此计算函数使用标签上的其他信息或基于对标签执行的操作(例如重新校验)。因此这个字段不能直接写入。当从标签读取时,任何控制信息字段都可能出现在解码EPC内存区的URI中。写入标签时,将URI编码到标签中时,将忽略umixpc字段。

为了帮助解码,URI中出现的任何控制信息字段必须按字母顺序出现(与上表中的顺序相同)。

非标准提示:示例:下例演示了EPC Tag URI 和 EPC Raw URI中控制信息字段的使用。

urn:epc:tag:sgtin-96:3.0614141.112345.400

这是一个携带SGTIN EPC的标签,过滤位 = 3,危险材料属性位设置为0,无用户内存(用户内存指示 = 0),并且无重新校验(扩展PC = 0)。这说明了与标签数据标准的早期版本的反向兼容性。

urn:epc:tag:[att=x01]:sgtin-96:3.0614141.112345.400

这是一个携带SGTIN EPC的标签,过滤位 = 3,危险材料属性位设置为0,无用户内存(用户内存指示 = 0),并且无重新校验(扩展PC = 0)。该URI可以由希望调试标签的应用程序指定,其中有害物质位设置为1,过滤位和EPC如上所示。

urn:epc:raw:[att=x01][umi=1][xpc=x0004]:96.x1234567890ABCDEF01234567

这是一个切换位 = 0的标签,位$20_h$是随机数(不能解码为EPC),危险品属性位设置为1,用户内存中的内容为非零,并已重新校验(如扩展PC所示)。

urn:epc:raw:[xpc=x0001]:96.xC1.x1234567890ABCDEF01234567

这是一个切换位 = 1的标签,应用类型识别码 = C1(十六进制),并且用户内存被删除(如扩展PC所指示的)。

EPC Tag URI 和 EPC Pure Identity URI

第6章中定义的Pure Identity EPC URI是用于信息系统的EPC的表示。Pure Identity EPC URI唯一的信息是EPC本身。相比之下,EPC Tag URI则包含了附加信息:它指定了EPC内存区中的所有控制信息字段的内容,还指定了使用何种编码结构将EPC编码为二进制数据。因此,将Pure Identity EPC URI转换为EPC Tag URI时,必须提供附加信息。相反,从EPC Tag URI中提取Pure Identity EPC URI则需要将这些信息移除。本节将讲述这些转换完成的过程。

EPC 二进制编码结构

对于第6章中描述的每个EPC scheme,都有一个或多个对应的EPC二进制编码方案,用于确定如何将EPC编码成二进制表示以在RFID标签中使用。当给定EPC scheme存在多于一个EPC二进制编码方案时,用户必须选择使用哪种二进制编码方案。一般来说,较短的二进制编码方案产生较少的位,因此允许使用包含较少内存的较便宜的RFID标签,但限制在允许的序列号范围内。较长的二进制编码方案允许GS1通用规范允许的完整序列号范围,但需要更多的位,因此需要更昂贵的RFID标签。

需要注意的是,当且仅当Pure Identity EPC URI是字符对字符完全相同时,两个EPC才是相同的。如果GS1公司前缀、项目参考指示和序列号相同,长二进制编码(例如SGTIN-198)与短二进制编码(例如SGTIN-96)没有区别。

下表列举了可用的EPC二进制编码方案,并指出了对序列号施加的限制。

EPC Scheme EPC二进制编码方案 EPC + 过滤位数 包含过滤值 序列号限制
sgtin sgtin-96 96 Yes 仅数字,无前导零,十进制数,必须小于238(例如,十进制值必须小于或等于274,877,906,943)。
sgtin-198 198 Yes 所有GS1通用规范允许的值(最多20个字母数字字符)
sscc sscc-96 96 Yes 所有GS1通用规范允许的值(包括扩展位在内的11-5位十进制数字,取决于GS1公司前缀长度)
sgln sgln-96 96 Yes 仅数字,无前导零,十进制数,必须小于241(例如,十进制值必须小于或等于2,199,023,255,551)。
sgln-195 195 Yes 所有GS1通用规范允许的值(最多20个字母数字字符)
grai grai-96 96 Yes 仅数字,无前导零,十进制数必须小于238(例如,十进制值必须小于或等于274,877,906,943)。
grai-1170 170 Yes 所有GS1通用规范允许的值(最多16个字母数字字符)
giai giai-96 96 Yes 仅数字,无前导零,十进制数,必须小于根据GS1公司前缀的长度而变化的限制。 见第14.5.5.1节。
giai-202 202 Yes 所有GS1通用规范允许的值(最多18-24个字母数字字符,取决于公司前缀长度)
gsrn gsrn-96 96 Yes 所有GS1通用规范允许的值(11-5位小数,取决于GS1公司前缀长度)
gsrnp gsrnp-96 96 Yes 所有GS1通用规范允许的值(11-5位小数,取决于GS1公司前缀长度)
gdti giai-96 96 Yes 仅数字,无前导零,十进制数必须小于241(例如,十进制值必须小于或等于2,199,023,255,551)。
gdti-113(不推荐作为TDS1.9) 113 Yes GS1通用规范[GS1GS12.0]之前允许的所有值(最多17位十进制数字,有或没有前导零)
gdti-174 174 Yes GS1通用规范允许的所有值(最多17位十进制字母数字字符)
sgcn sgcn-96 96 Yes 仅数字,最多12位有或无前导零十进制数字
itip itip-110 110 Yes 仅数字,无前导零,十进制数必须小于238(例如,十进制值必须小于或等于274,877,906,943)。
itip-212 212 Yes GS1通用规范允许的所有值(最多20位字母数字字符)
gid gid-96 96 No 仅数字,无前导零,十进制数必须小于236(例如,十进制数必须小于或等68,719,476,735)
usdod usdod-96 96 参考“美国国防部供应商被动RFID信息指南”,可在美国国防部网站上获得([http://www.dodrfid.org/supplierguide.htm](http://www.dodrfid.org/supplierguide.htm))
adi adi-var 可变 Yes 参考14.5.13.1节
cpi cpi-96 96 Yes 系列号:仅数字,无前导零,十进制数必须小于231(例如,十进制数必须小于或等2,147,483,647)
组件/部件参考也仅限于数值值,没有前导零,其长度小于或等于15减去GS1公司前缀的长度
cpi-var 可变 Yes GS1通用规范允许的所有值(最多12位数字,无前导零)
表 12-2:EPC二进制编码结构及其限制

非标提示:解释:对于SGTIN、SGLN、GRAI和GIAI EPC scheme来说,根据GS1通用规范的序列号是可变长度、字母数字字符串。这意味着340340034都是不同的系列号,就如P3434P0P34P034等。为了提供多达20个字母数字字符,需要140位来编码序列号。这就是为什么“长”二进制编码都需要如此多的比特。 类似的考虑也适用于GDTI EPC scheme,除了GDTI只允许数字字符(但仍然允许前导零)。

为了适应非常常见的96-bit RFID标签,引入了额外的二进制编码方案,只需要96位。为了适应96位以内,必须排除一些序列号。SGTIN、SGLN、GRAI、GIAI和GDTI的96位编码仅限于只由数字组成的序列号,这些数字没有前导零(除非序列号由单个0数字组成),并且当被视为十进制数字时,其值小于$2^B$,其中B是二进制编码方案中可用的位数。排除带前导零系列号的选择在最初定义96-bit编码时是一种任意的设计选择;例如,另一种选择是允许前导零,而不排除其他序列号。但无法回避的事实是,在B位中,不同的序列号不能超过$2^B$。

当解码“长”二进制编码时,当二进制编码包含前导零字符时,不允许去掉前导零。在将EPC编码为“短”或“长”的形式时,编码前不允许去掉前导零。这意味着序列号有前导零的EPC只能以“长”形式编码。

在某些应用中,希望序列号始终包含特定数量的字符。其原因可能包括需要EPC URI字符串的可预测长度,或者对于相同标识符的相应条形码编码具有可预测的大小。在某些条形码应用程序中,这是通过使用前导零来实现的。但是,如果使用96-bit标签,则不存在使用前导零的选项。

因此,在既需要96位标签又要求序列号为固定字符数的应用中,建议使用范围为 $10^D ≤ serial < 10^{D+1}$ 的数字序列号,其中D是数字所需的位数。例如,如果需要11位序列号,则应用程序可以使用10,000,000,000到99,999,999,999之间的序列号。此类应用程序必须注意使用符合96-bit标签限制的序列号。例如,如果SGTIN-96编码需要12位序列号,则序列号必须在100,000,000,000到274,877,906,943之间。

但是,应该记住,许多应用程序不需要序列号中的固定字符数,因此从0到最大值(不带前导零)的所有序列号都可以与96-bit标签一起使用。

EPC Pure Identity URI转换为EPC Tag URI

假设:

  • 有一个第6.3节中描述的EPC Pure Identity URI,它是一个字符串,与第6.3节中EPC-URI产品的语法相匹配。
  • 选择要使用的二进制编码方案。这是表12-2“EPC Binary Coding Scheme”列中规定的二进制编码方案之一。所选择的二进制编码方案必须与EPC Pure Identity URI中的EPC scheme相对应。
  • 一个过滤值,如果表12-2中的“Includes Filter Value”列指示二进制编码包含一个过滤值。
  • 属性位的值。
  • 用户内存指示的值。

校验:

  • EPC的系列号部分(最右边的点字符后面的字符)必须符合所选二进制编码方案暗示的任何限制,如表12-2的“Serial Number Limitation”列所规定。
  • 过滤值的范围必须为:$0 ≤ filter ≤ 7$。

过程:

  1. 从EPC Pure Identity URI开始,将前缀urn:epc:id:替换为urn:epc:tag:
  2. 将 EPC scheme名称替换为选择的EPC二进制编码结构名称。例如:将sgtin替换为sgtin-96sgtin-198
  3. 如果选择的二进制编码结构包含一个过滤值,在URI最右边的冒号(“:”)字符后插入过滤值,并在其后插入一个点(“.”)字符。
  4. 如果属性值为非零,构造一个字符串[att=xNN],其中NN是属性位值的2位十六进制数字表示。
  5. 如果用户内存指示为非零,构造一个字符串[umi=1]
  6. 如果步骤4或步骤5生成一个非空字符串,请在URI最右边的冒号(“:”)字符后插入这些字符串,然后再插入一个冒号字符。
  7. 结果字符串就是EPC Tag URI。

EPC Tag URI转换为EPC Pure Identity URI

假设:

  1. 第12章描述的EPC Tag URI,这是一个匹配12.4节TagURI产品语法的字符串。

过程:

  1. 从EPC Tag URI开始,将urn:epc:tag:替换为urn:epc:id:
  2. 将EPC二进制编码结构名称替换为相应的EPC scheme名称。例如,将sgtin-96sgtin-198替换为sgtin
  3. 如果编码结构包含过滤值,移除过滤值(最右边冒号字符后面的数字)以及之后的点(“.”)字符。
  4. 如果URI包含12.2.2节中指定的一个或多个控制字段,移除它们以及之后的冒号字符。
  5. 结果字符串就是Pure Identity EPC URI。

语法

下列语法描述了EPC Tag URI和EPC Raw URI的句法。语法参考了第5节和第6.3节中定义的语法元素。

TagOrRawURI ::= TagURI | RawURI
TagURI ::= “urn:epc:tag:” TagURIControlBody
TagURIControlBody ::= ( ControlField+ “:” )? TagURIBody
TagURIBody ::= SGTINTagURIBody | SSCCTagURIBody | SGLNTagURIBody |
GRAITagURIBody | GIAITagURIBody | GDTITagURIBody | GSRNTagURIBody |
GSRNPTagURIBody | ITIPTagURIBody | GIDTagURIBody | SGCNTagURIBody |
DODTagURIBody | ADITagUriBody | CPITagURIBody
SGTINTagURIBody ::= SGTINEncName “:” NumericComponent “.” SGTINURIBody
SGTINEncName ::= “sgtin-96” | “sgtin-198”
SSCCTagURIBody ::= SSCCEncName “:” NumericComponent “.” SSCCURIBody
SSCCEncName ::= “sscc-96”
SGLNTagURIBody ::= SGLNEncName “:” NumericComponent “.” SGLNURIBody
SGLNEncName ::= “sgln-96” | “sgln-195”
GRAITagURIBody ::= GRAIEncName “:” NumericComponent “.” GRAIURIBody
GRAIEncName ::= “grai-96” | “grai-170”
GIAITagURIBody ::= GIAIEncName “:” NumericComponent “.” GIAIURIBody
GIAIEncName ::= “giai-96” | “giai-202”
GSRNTagURIBody ::= GSRNEncName “:” NumericComponent “.” GSRNURIBody
GSRNEncName ::= “gsrn- 96”
GSRNPEncName ::= “gsrnp-96”
GDTITagURIBody ::= GDTIEncName “:” NumericComponent “.” GDTIURIBody
GDTIEncName ::= “gdti-96” | “gdti-113” | “gdti-174”
CPITagURIBody ::= CPIEncName “:” NumericComponent “.” CPIURIBody
CPIEncName ::= “cpi-96” | “cpi-var”
SGCNTagURIBody ::= SGCNEncName “:” NumericComponent “.” SGCNURIBody
SGCNEncName ::= “sgcn-96”
ITIPTagURIBody ::= ITIPEncName “:” NumericComponent “.” ITIPURIBody
ITIPEncName ::= “itip-110” | “itip-212”
GIDTagURIBody ::= GIDEncName “:” GIDURIBody
GIDEncName ::= “gid-96”
DODTagURIBody ::= DODEncName “:” NumericComponent “.” DODURIBody
DODEncName ::= “usdod-96”
ADITagURIBody ::= ADIEncName “:” NumericComponent “.” ADIURIBody
ADIEncName ::= “adi-var”
RawURI ::= “urn:epc:raw:” RawURIControlBody
RawURIControlBody ::= ( ControlField+ “:”)? RawURIBody
RawURIBody ::= DecimalRawURIBody | HexRawURIBody | AFIRawURIBody
DecimalRawURIBody ::= NonZeroComponent “.” NumericComponent
HexRawURIBody ::= NonZeroComponent “.x” HexComponentOrEmpty
AFIRawURIBody ::= NonZeroComponent “.x” HexComponent “.x”
HexComponentOrEmpty
ControlField ::= “[” ControlName “=” ControlValue “]”
ControlName ::= “att” | “umi” | “xpc”
ControlValue ::= BinaryControlValue | HexControlValue
BinaryControlValue ::= “0” | “1”
HexControlValue ::= “x” HexComponent

用于EPC标签编码模式的URI

某些软件应用程序需要根据各种条件指定标签过滤列表的规则。本规范为此提供了一个EPC Tag Pattern URI。EPC Tag Pattern URI并不表示单个标签编码,而是指一组标签编码。典型的模式如下所示:

urn:epc:pat:sgtin-96:3.0652642.[102400-204700].*

此模式指包含96-bit SGTIN EPC二进制编码的任何标签,其过滤器字段为3,其GS1公司前缀为0652642,其项目参考范围为$102400 ≤ itemReference ≤ 204700$,并且其序列号可以是任何数字。

通常,存在与每个EPC二进制编码方案相对应的EPC Tag Pattern URI方案,其句法基本上相同,除了在每个字段中可以使用范围或星号(*)字符。

对于本SGTIN、SSCC、SGLN、GRAI、GIAI、GSRN、GDTI、SGCN以及ITIP模式,模式句法稍微限制了通配符和范围如何组合。CompanyPrefix字段只允许两种可能性。第一,它可以是一个星号(*),这种情况下,其后的字段( ItemReference, SerialReference, LocationReference, AssetType,IndividualAssetReference, ServiceReference, DocumentType,CouponReference, PieceTotal)也必须是星号。第二,它可以是特定的公司前缀,在这种情况下,下面的字段可以是数字、范围或星号。不能为CompanyPrefix指定范围。

非标提示:解释:由于公司前缀为可变长度,所以不能指定范围,因为范围可能跨越不同的长度。但是,如果指定了特定的公司前缀,则可以匹配之后字段的范围或所有值,因为给定公司前缀的长度是固定的。允许的另一种情况是两个字段都是星形,这适用于所有标签编码,因为只会忽略相应的标签字段(包括分区字段,如果存在的话)。

DoD结构的模式URI如下:

urn:epc:pat:usdod-96:filterPat.CAGECodeOrDODAACPat.serialNumberPat

其中,filterPat是一个过滤值,一个[lo-hi]形式的范围,或是一个*字符;CAGECodeOrDODAACPat是一个 CAGE Code/DODAAC 或是一个*字符;serialNumberPat是一个系列号、一个[lo-hi]形式的范围或一个*字符。

航空航天和国防(ADI)标识符的模式URI如下:

urn:epc:pat:adi-
var:filterPat.CAGECodeOrDODAACPat.partNumberPat.serialNumberPat

其中,filterPat是一个过滤值、一个[lo-hi]形式的范围,或一个*字符;CAGECodeOrDODAACPat是一个 CAGE Code/DODAAC 或是一个*字符;partNumberPat是一个空字符串、一个零件号码,或是一个*字符;serialNumberPat是一个系列号或一个*号。

组件/部件(CPI)标识符的模式URI如下:

urn:epc:pat:cpi-96:filterPat.CPI96PatBody.serialNumberPat

urn:epc:pat:cpi-var:filterPat.CPIVarPatBody

其中,filterPat是一个过滤值,或一个[lo-hi]形式的范围,或是一个*字符;CPI96PatBody可以是*.*或一个GS1公司前缀跟着点(.)字符,或者数字组件/部件编号、一个[lo-hi]形式的范围、或一个*字符;serialNumberPat是一个系列号或一个*字符或一个[lo-hi]形式的范围;CPIVarPatBody*.*.*或一个GS1公司前缀跟着点(.)字符,然后跟着一个组件/部件参考,跟着一个点(.)字符,跟着组件、部件系列号,一个[lo-hi]形式的范围或一个*字符。

句法

EPC Tag Pattern URI通过如下语法定义。

PatURI ::= “urn:epc:pat:” PatBody
PatBody ::= GIDPatURIBody | SGTINPatURIBody | SGTINAlphaPatURIBody | 
SGLNGRAI96PatURIBody | SGLNGRAIAlphaPatURIBody | SSCCPatURIBody | 
GIAI96PatURIBody | GIAIAlphaPatURIBody | GSRNPatURIBody | GSRNPPatURIBody 
|GDTIPatURIBody | CPIVarPatURIBody | SGCNPatURIBody | ITIPPatURIBody | 
USDOD96PatURIBody ITIP212PatURIBody | ADIVarPatURIBody |CPI96PatURIBody | 
GIDPatURIBody ::= “gid-96:” 2*(PatComponent “.”) PatComponent 
SGTIN96PatURIBody ::= “sgtin-96:” PatComponent “.” GS1PatBody “.” PatComponent
SGTINAlphaPatURIBody ::= “sgtin-198:” PatComponent “.” GS1PatBody “.” GS3A3PatComponent 
SGLNGRAI96PatURIBody ::= SGLNGRAI96TagEncName “:” PatComponent “.” GS1EPatBody “.” PatComponent 
SGLNGRAI96TagEncName ::= “sgln-96” | “grai-96” 
SGLNGRAIAlphaPatURIBody ::= SGLNGRAIAlphaTagEncName “:” PatComponent “.” GS1EPatBody “.” GS3A3PatComponent 
SGLNGRAIAlphaTagEncName ::= “sgln-195” | “grai-170” 
SSCCPatURIBody ::= “sscc-96:” PatComponent “.” GS1PatBody 
GIAI96PatURIBody ::= “giai-96:” PatComponent “.” GS1PatBody 
GIAIAlphaPatURIBody ::= “giai-202:” PatComponent “.” GS1GS3A3PatBody
GSRNPatURIBody ::= “gsrn- 96:” PatComponent “.” GS1PatBody
GSRNPPatURIBody ::= “gsrnp-96:” PatComponent “.” GS1PatBody
GDTIPatURIBody ::= GDTI96PatURIBody | GDTI113PatURIBody| GDTI174PatURIBody
GDTI96PatURIBody ::= “gdti-96:” PatComponent “.” GS1EPatBody “.” PatComponent 
GDTI113PatURIBody ::= “gdti-113:” PatComponent “.” GS1EPatBody “.” PaddedNumericOrStarComponent
GDTI174PatURIBody ::= “gdti-174:” PatComponent “.” GS1EPatBody “.” GS1GS3A3PatBody
CPI96PatURIBody ::= “cpi-96:” PatComponent “.” GS1PatBody “.” PatComponent 
CPIVarPatURIBody ::= “cpi-var:” PatComponent “.” CPIVarPatBody 
CPIVarPatBody ::= “*.*.*” | PaddedNumericComponent “.” CPRefComponent “.” PatComponent
SGCNPatURIBody ::= SGCN96PatURIBody
SGCN96PatURIBody ::= “sgcn-96:” PatComponent “.” GS1EPatBody “.” PaddedNumericOrStarComponent
USDOD96PatURIBody ::= “usdod-96:” PatComponent “.” CAGECodeOrDODAACPat “.” PatComponent
ADIVarPatURIBody ::= “adi-var:” PatComponent “.” CAGECodeOrDODAACPat “.” ADIPatComponent “.” ADIExtendedPatComponent 
PaddedNumericOrStarComponent ::= PaddedNumericComponent | StarComponent 
GS1PatBody ::= “*.*” | ( PaddedNumericComponent “.” PaddedPatComponent )
GS1EPatBody ::= “*.*” | ( PaddedNumericComponent “.” PaddedOrEmptyPatComponent ) 
GS1GS3A3PatBody ::= “*.*” | ( PaddedNumericComponent “.” GS3A3PatComponent ) 
PatComponent ::= NumericComponent | StarComponent | RangeComponent
PaddedPatComponent ::= PaddedNumericComponent | StarComponent | RangeComponent
PaddedOrEmptyPatComponent ::= PaddedNumericComponentOrEmpty | StarComponent | RangeComponent
GS3A3PatComponent ::= GS3A3Component | StarComponent
CAGECodeOrDODAACPat ::= CAGECodeOrDODAAC | StarComponent
ADIPatComponent::= ADIComponent | StarComponent
ADIExtendedPatComponent ::= ADIExtendedComponent | StarComponent
StarComponent ::= “*” 
RangeComponent ::= “[” NumericComponent “-” 
NumericComponent “]” 

要使RangeComponent合法,第一个NumericComponent的数值必须小于或等于第二个NumericComponent的数值。

语义

EPC Tag Pattern URI(urn:epc:pat:)的含义被正式定义为表示一组EPC Tag URI。

由特定EPC Tag Pattern URI表示的EPC集合由以下决策过程定义,该决策过程表示给定的EPC Tag URI是否属于由EPC Tag Pattern URI表示的集合。

urn:epc:pat:EncName:P1.P2...Pn为EPC Tag Pattern URI。让urn:epc:tag:EncName:C1.C2...Cn为EPC Tag URI,其中两个URI的EncName字段相同。组件(n)的数量取决于EncName的值。

首先,任何EPC Tag URI组件Ci都被认为与相应的EPC Tag Pattern URI组件Pi相匹配,如果:

  • Pi是一个NumericComponentCi等于Pi;或
  • Pi是一个PaddedNumericComponent,并且Ci无论是数值还是长度都等于Pi;或
  • Pi是一个GS3A3ComponentADIExtendedComponentADIComponentCPRefComponent,并且Ci字符对字符等于Pi;或
  • Pi是一个CAGECodeOrDODAAC,并且Ci等于Pi;或
  • Pi是一个RangeComponent [lo-hi],并且$lo ≤ Ci ≤ hi$;或
  • Pi是一个StarComponentCi为任何值)

那么EPC Tag URI是由EPC Pattern URI表示的集合的一个成员,当且仅当Ci匹配所有$1 ≤ i ≤ n$的Pi时。

;

© 2018 - IOT小分队文章发布系统 v0.3