射频识别(RFID)技术

EPC标签数据标准-4

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

EPC二进制编码

本节讲述EPC Tag URI是如何被编码为二进制串,以及如何将一个二进制串解码为EPC Tag URI(如果可能的话)。如第14.5.13节所规定,本文中编码和解码过程定义的二进制串适用于Gen 2 标签的EPC内存区。

将EPC Tag URI编码为Gen 2标签EPC内存区的二进制内容的完整过程在15.1.1节中描述。第15.1.1节中的过程使用第14.3节中定义的过程来完成大部分工作。相反,将Gen 2标签EPC内存区的二进制内容解码为EPC Tag URI(或EPC Raw URI,如果可能)的完整过程在15.2.2中描述。第15.2.2节中的过程使用第14.3.9节中定义的过程来完成大部分工作。

二进制编码概览

标签上使用的EPC二进制编码的一般结构是一个比特串(即二进制表示),由一个固定长度的首部和一系列域组成,这些域的总长度、结构和功能由首部值决定。第14.2节规定了指定的首部值。

EPC Tag URI和二进制编码之间的转换过程在14.3节(将URI编码为二进制)和14.3.9节(将二进制解码为URI)中规定。编码和解码程序均由第14.4.9节规定的编码表驱动。每个编码表对于给定的首部值,都在其后指定了域结构。

要将一个EPC Tag URI转换为EPC二进制编码,请遵循第14.3节中指定的过程,该过程总结如下。首先,在14.4.9节的表中选择合适的编码表。正确的编码表是其“URI Template”条目与给定的EPC Tag URI匹配的表。编码表中的每一列对应于最终二进制编码中的位域。在每一列中,指定一个“编码方法”,说明如何计算二进制编码的相应位,给定URI的某些部分作为输入。每个“编码方法”的编码细节在第14.3节的小节中给出。

要将EPC二进制编码转换为EPC Tag URI,请遵循第14.3.9中的过程,该过程总结如下。首先,在EPC二进制首部表(第14.2节的表14-1)中查找最高有效8位。这标识了EPC编码方案,而EPC编码方案又从第14.4.9节规定的编码表中选择一个编码表。编码表中的每一列对应于输入二进制编码中的一个位域。在每一列中,指定一个“编码方法”,说明如何计算输出URI的相应部分,给定的位域作为输入。第14.3.9节小节给出了每种“编码方法”的解码细节。

EPC二进制首部

标签上使用的EPC二进制编码的一般结构是作为位串(也就是二进制表现形式),由一个固定长度、8-bit首部跟随一组域组成,其总长度、结构以及功能由首部值决定。为了将来的扩展目的,定义了首部值11111111,以指示使用了超过8位的更长的首部;这为将来的扩展提供了条件,以便通过使用更长的首部可以容纳256个以上的首部值。因此,本规范提供了多达255个8位首部,加上当前未确定数量的更长首部。

非标提示:反向兼容性说明:在以前版本的标签数据标准中,首部的长度是可变的,使用分层方法,其中每层中的零值表示首部是从下一个较长的层提取的。对于早期规范中定义的编码,首部是2位或8位。假设保留零值以指示下一个较长层中的首部,则2位首部有3个可能值(01、10和11,而不是00),8位首部有63个可能值(认为前2位必须是00,并保留00000000以允许首部长于8位)。两位首部仅与某些64位EPC二进制编码一起使用。

在这个版本的标签数据标准中,分层首部方法已经被放弃。此外,所有64位编码(包括使用2位首部的所有编码)都已弃用,不应在新应用程序中使用。为了促进有序的转换,在该版本的标签数据标准中保留先前由64位编码占用的首部空间的部分,目的是在“日落之日”已经过去之后回收它们。在“日落之日”后,包含带有2位首部的64位EPC的标签和带有以 00001 开头的64位首部的标签将不再被正确解释。

本次版本的EPC标签数据标准中定义的编码结构如表14-1所示。本表还指示了当前未分配的首部值-“保留未来使用”。EPCglobal先前于2006年7月1日宣布,为EPC标签数据标准的早期版本中定义的遗留64位编码保留的所有首部值均于2009年7月1日起生效。

首部值(二进制) 首部值(十六进制) 编码长度(bit) 编码结构
0000 0000 00 NA 未编程标签
0000 0001
0000 001x
0000 01xx
01,02,03,04,05,06,07 NA
NA
NA
NA
保留将来使用
保留将来使用
保留将来使用
保留将来使用
0000 1000 08 保留将来使用
0000 1001 09 保留将来使用
0000 1010 0A 保留将来使用
0000 1011 0B 保留将来使用
0000 1100 至 0000 1111 0C 至 0F 保留将来使用
0001 0000 至 0010 1011 10 至 2B NA 保留将来使用
0010 1100 2C 96 GDTI-96
0010 1101 2D 96 GSRN-96
0010 1110 2E 96 GSRNP
0010 1111 2F 96 USDoD-96
0011 0000 30 96 SGTIN-96
0011 0001 31 96 SSCC-96
0011 0010 32 96 SGLN-96
0011 0011 33 96 GRAI-96
0011 0100 34 96 GIAI-96
0011 0101 35 96 GID-96
0011 0110 36 198 SGTIN-198
0011 0111 37 170 GRAI-170
0011 1000 38 202 GIAI-202
0011 1001 39 195 SGLN-195
0011 1010 3A 113 GDTI-113(DEPERCATED as of TDS 1.9)
0011 1011 3B 可变 ADI-var
0011 1100 3C 96 CPI-96
0011 1101 3D 可变 CPI-var
0011 1110 3E 174 GDTI-174
0011 1111 3F 96 SGCN-96
0100 0000 40 110 ITIP-110
0100 0001 41 212 ITIP-212
0100 0010 至 0111 1111 42 至 7F 保留将来使用
1000 0000 至 1011 1111 80 至 BF 保留将来使用
1100 0000 至 1100 1101 C0 至 CD 保留将来使用
1100 1110 CE 保留将来使用
1100 1111 至 1110 0001 CF 至 E1 保留将来使用
1110 0010 E2 为了避免与TID内存的前八位混淆,E2永久保留(第16节)。
1110 0011 至 1111 1110 E3 至 FE 保留将来使用
1111 1111 FF NA 保留将来使用(明确保留给超过8位的首部)
表 14-1:EPC二进制首部值

编码过程

以下过程将EPC Tag URI编码为包含编码的EPC和(对于具有过滤值的EPC scheme)过滤值的位串。此位串适合于存储在Gen 2 标签的EPC内存区的从20h地址开始处。参考15.1.1节获取编码整个EPC内存区的完整过程,包括驻留在编码EPC之外的控制信息(第15.1.1节中的过程使用下面的过程作为子程序。)

给定:

  • 一个urn:epc:tag:scheme:remainder形式的EPC Tag URI。

得到:

  • 一个包含特定EPC Tag URI的EPC二进制编码的位串,包含编码的带过滤值(如果适用)的EPC;或
  • 一个异常指示,表示EPC Tag URI无法编码。

过程:

  1. 使用编码表的scheme标识此URI scheme。如果不存在这样的scheme,请停止:此URI在语法上不合法。
  2. 确认URI在语法上匹配与编码表相关的URI模板。 如果没有,停止:这个URI在语法上是不合法的。
  3. 从左到右读取编码表,并构造每个列中指定的编码以获得位串。如果表的“代码段比特数”行指定固定的位数量,获得的位串将总是这个长度。编码每一行的方法依赖于表的“编码方法”。如果“编码方法”行指定了特定的位串,使用那一列的位串。否则,请参阅指定编码方法的之后部分。 如果任何段的编码失败,停止:此URI不能编码。
  4. 将从步骤3生成的位串连接起来,形成单个位串。如果scheme指定的二进制总长度是固定长度,那么获得的位串将始终是该长度。位串的中每个段的位置在编码表的“比特位置”行中指定。第15.1.1节描述了使用此步骤对Gen 2标签的EPC内存区进行编码过程的结果。

以下小节指定了步骤3中使用的过程。

“整数"编码方法

整数编码方法用于在URI中显示为十进制整数以及在二进制编码中显示为二进制整数的段。

输入: 编码方法的输入是编码表的“URI portion”行中表示的URI部分,这是一个没有点(.)字符的字符串。

有效性测试: 输入字符串必须满足以下条件:

  • 它必须在语法上匹配第5章中规定的NumericComponent
  • 在字符串的值被视为十进制整数时,必须小于 $2^b$,其中 $b$ 为编码表的“代码段比特数”行中所指定的值。

如果上述任何测试失败,则URI编码失败。

输出: 此段的编码是一个 $b$ 位 整数(如果需要,在左侧填零),其中 $b$ 为编码表“代码段比特数”行所指定的值,其值是被视为十进制整数的输入字符串的值。

“字符串”编码方法

字符串编码方法用于在URI中显示为字母数字字符串以及在二进制编码中显示为ISO 646(ASCII)编码的段。

输入: 编码方法的输入是编码表的“URI portion”行指示的URI部分,这是一个没有点(.)字符的字符串。

有效性测试:

  1. 它在语法上必须匹配第5章中规定的GS3A3Component
  2. 对于与第5节中指定的语法转义产生相匹配的字符串的每个部分(即,由一个%字符后跟两个十六进制数字组成的3字符序列),%字符后面的两个十六进制字符必须映射到表A-1中指定的82个允许字符之一。
  3. 字符个数必须小于等于 $b/7$,其中 $b$ 为编码表的“代码段比特数”行中指定的值。

如果上述任何测试失败,则URI编码失败。

输出: 假设输入为一个由零个或多个字符 $s_1 s_2 ... s_n$ 组成的字符串,其中每个字符 $s_1$ 要么是单个字符,要么是匹配语法转义产生的3个字符序列(即,由%字符后跟两个十六进制数字组成的3字符序列)。将每个字符转换为7-bit字符串。对于单个字符,对应的7-bit字符串在表A-1中指定。对于转义序列,7-bit字符串被认为是7-bit整数的两个十六进制字符的值。将这些7-bit字符串按照与输入相对应的顺序串联起来,然后根据需要在右侧填充零位,以获得总的 $b$ 位,其中 $b$ 是在编码表的“代码段比特数”行中指定的值。(填充位的数目将是 $b–7N$。)得到的 $b$ 位字符串就是输出。

“分区表”编码方法

分区表编码方法用于在URI中显示为一对由点(“.”)字符分隔的可变长度数字字段的段,以及在二进制编码中显示为一个3-bit“分区”域,后跟两个可变长度二进制整数的字段。两个URI域中的字符总数总是恒定的字符数,二进制编码中的位数总和也是恒定的位数。

分区表编码方法使用一个“分区表”。此特定分区表在给定EPC scheme的编码表中指定。

输入: 编码方法中输入的是编码表中“URI portion”行中指示的 URI portion。它是由点(.)字符分隔的两个数字字符串组成。在这个编码过程中,点左边和右边的数字串分别表示为 $C$ 和 $D$。

有效性测试: 输入必须满足以下条件:

  • $C$ 必须满足第5章中指定的PaddedNumericComponent的语法。
  • $D$ 必须满足第5章中指定的PaddedNumericComponentOrEmpty的语法。
  • $C$ 中的数字个数必须匹配分区表“GS1公司前缀数字(L)”列中指定的值之一。在剩余编码过程中,对应的行叫“匹配分区表行”。
  • $D$ 中的数字个数必须匹配与分区表行相匹配的其他域数字列中指定的值。请注意,如果其他域数字列指定为零,则 $d$ 必须是空字符串,这意味着整个输入段以“点”字符结尾。

输出: 通过连接以下三个组件来构造输出位串:

  • $P$ 的值在分区表所匹配的行的“分区值”列中指定,它是一个3-bit二进制整数。
  • $C$ 的值是一个十进制整数,转换为 $M$-bit二进制整数,其中 $M$ 为位的个数,在匹配分区表行的“GS1公司前缀数位”列中指定。
  • $D$ 的值是一个十进制整数,转换为 $N$-bit二进制整数,其中 $N$ 为位的个数,在匹配分区表行的“其它字域位”列中指定。如果 $D$ 为空字符串,则 $N$-bit整数为零。

得到的位串长度为($3+M+N$),它总等于此段在编码表中“代码段比特数”列所指示的值。

“非填充分区表”编码方法

非填充分区表编码方法用于在URI中显示为一对由点(.)字符分隔的可变长度数字域组成的段,以及在二进制编码中显示为一个3-bit“分区”域,后跟两个可变长度二进制整数的段。两个URI域中的字符数始终小于或等于已知限制,二进制编码中的位数始终为常量。

非填充分区表编码方法使用一个“分区表”,此特定分区表在给定EPC scheme的编码表中指定。

输入: 编码方法的输入是编码表中“URI portion”行中指示的URI portion。它是由点(.)字符分隔的两个数字字符串组成。在这个编码过程中,点左边和右边的数字串分别表示为 $C$ 和 $D$。

有效性测试: 输入必须满足以下要求:

  • $C$ 必须满足第5章中指定的PaddedNumericComponent的语法。
  • $D$ 必须满足第5章中指定的NumericComponent的语法。
  • $C$ 中的数字个数必须匹配分区表“GS1公司前缀数字(L)”列中指定的值之一。在剩余编码过程中,对应的行叫“匹配分区表行”。
  • $D$ 的值是一个十进制数字,必须小于 $2^N$,其中 $N$ 是位的个数,在分区表所匹配的行的其它字域位列中指定。

输出: 通过以下三个组件构造输出位串:

  • $P$ 的值在分区表所匹配的行的“分区值”列中指定,它是一个3-bit二进制整数。
  • $C$ 的值是一个十进制整数,转换为 $M$-bit二进制整数,其中 $M$ 为位的个数,在匹配分区表行的“GS1公司前缀位”列中指定。
  • $D$ 的值是一个十进制整数,转换为 $N$-bit二进制整数,其中 $N$ 为位的个数,在匹配分区表行的“其它字域位”列中指定。如果 $D$ 为空字符串,则 $N$-bit整数为零。

得到的位串长度为($3+M+N$),它总等于此段在编码表中“代码段比特数”列所指示的值。

“字符串分区表”编码方法

字符串分区表编码方法用于一个段,在URI中,此段是由点(.)字符分隔的可变长数字域和可变长字符串域组成;在二进制编码中,此段为3-bit“分区”域后跟一个可变长度二进制整数和一个可变长度二进制编码字符串。两个URI域的字符个数总是小于或等于已经限制(将3字符转义序列作为单个字符),并且如果需要恒定的位数,将对二进制编码进行填充。

字符串分区表编码方法使用一个“分区表”,此特定分区表在给定EPC scheme的编码表中指定。

输入: 编码方法的输入为编码表中“URI protion”行中指示的URI protion。它由两个由点(.)字符分隔的字符串组成。在这个编码过程中,点左边和右边的字符串分别表示为 $C$ 和 $D$。

有效性测试: 输入必须满足以下条件:

  • $C$ 必须匹配第5章指定的PaddedNumericComponent的语法。
  • $D$ 必须匹配第5章指定的GS3A3Component的语法。
  • $C$ 中的数字个数必须匹配分区表“GS1公司前缀数字(L)”列中指定的值之一。在剩余编码过程中,对应的行叫“匹配分区表行”。
  • 对于与第5章中指定的语法生成的转义(也就是由%字符后跟两个十六进制数字组成的三字符序列)相匹配的 $D$ 的每个部分,%字符之后的两个十六进制数字必须映射为表A-1所允许的82个字符之一。

输出: 通过连接以下三个组件构造输出位字符串:

  • $P$ 的值在匹配分区表行的“分区值”列中指定,它是一个3-bit二进制整数。
  • $C$ 的值是一个十进制整数,转换为 $M$-bit二进制整数,其中 $M$ 为位的个数,在匹配分区表行的“GS1公司前缀数位”列中指定。
  • $D$ 的值转换为一个 $N$-bit二进制串,其中 $N$ 为位的个数,其值在匹配分区表行的其它域位列中指定。这个 $N$-bit二进制串构成如下:假设 $D$ 是一个零或多个字符组成的字符串 $s_1 s_2 ... s_N$,每个字符 $s_i$ 要么是单个字符,要么是转义语法生成的3字符序列(3字符序列由一个%字符其后跟随两个十六进制数字组成)。将每个字符转化为7-bit字符串。对于单个字符,相应的7-bit字符串在表A-1中指定。对于转义序列,7-bit字符串被认为是7-bit整数的两个十六进制字符的值。将这些7位字符串按与输入对应的顺序连接起来,然后在必要时用零填充,以达到总计 $N$ 位。

得到的位串长度为($3+M+N$),它总等于此段在编码表中“代码段比特数”列所指示的值。

“数字串”编码方法

数字串编码方法用于在URI中显示为数字字符串的段,可能包含前导零。在二进制编码中,通过在编码之前在数字串前加一个数字“1”,可以保留前导零。

输入: 编码方法的输入是编码表的“URI portion”行所指示的URI portion,它是一个没有点(.)字符的字符串。

有效性测试: 输入字符串必须满足以下条件:

  • 它必须匹配第5章指定的PaddedNumericComponent的语法。
  • 字符串中的数字个数 $D$ 必须为 $2×10^D < 2^b$,其中 $b$ 为编码表的“代码段比特数”行所指示的值。(对于GDTI-113 scheme,$b=58$,因此,数字 $D$ 的数量必须小于等于17。GDTI-113和SGCN-96是唯一使用此编码方法的scheme。)

如果上述测试出现任何失败,URI编码失败。

输出: 按如下方式构造输出位:

  • 在输入字符串左边加上字符“1”。
  • 将结果字符串转换为一个 $b$-bit整数(如果需要,在左边填充前导零),其中 $b$ 是编码表的“位数量”行所指定值,此值为输入字符串的十进制值。

“6-bit CAGE/DODAAC”编码方法

6-bit CAGE/DODAAC编码方法用于在URI中作为5字符CAGE码或6字符DODAAC显示的段,或者在二进制编码中作为36-bit编码位串。

输入: 编码方法的输入是编码表的“URI portion”行所指示的URI portion,为一个无点(.)字符的5或6位字符串。

有效性测试: 输入字符串必须满足以下条件:

  • 它必须匹配第6.3.17节中指定的CAGECodeOrDODAAC的语法。如果以下测试失败,则URI编码失败。

输出: 假设输入的是一个5或6个字符的字符串 $d_1 d_2 ... d_N$,其中每个字符 $d_i$ 是单个字符。使用表G-1(G)将每个字符转换为6-bit字符串。按输入的顺序连接这些6-bit字符串。如果输入为5个字符,则在结果左侧加上6-bit值100000。得到的36-bit字符串就是输出。

“6-bit可变串”编码方法

6-bit可变串编码方法用于在URI中作为字符串域出现的段,或在二进制编码中作为可变长度空结尾二进制编码字符串出现的段。

输入: 编码方法的输入是编码表中“URI portion”行指示的URI portion。

有效性测试: 输入必须满足以下条件:

  • 输入必须匹配6.3节的相应小节所指定的URI对应portion的语法。
  • 输入的字符个数必须大于等于最小字符数,并且小于等于编码表脚注中为此编码表列指定的最大字符数。在本规则中,转义三元组(%nn)计为一个字符。
  • 对于输入的每个portion,如果与第5章中指定语法的转结果相匹配(也就是由一个%字符后加两个十六进制数字组成的3字符序列),则%字符之后的两一个十六进制字符必须映射为表G-1(G)指定的字符之一,并且这样映射的字符必须满足编码表中为该编码段指定的任何其他约束。
  • 对于输入的每个portion,如果是单个字符(与之相反的是3字符转义序列),该字符必须满足编码表中为此编码段指定的任何其他约束。

输出: 假设输入的是一个0或多字符字符串 $s_1 s_2 ... s_N$,其中每个字符$s_i$要么是单个字符,要么是与语法产生的转义相匹配的3字符序列(也就是由一个%字符后跟两个十六进制数字组成的3字符序列)。将每个字符转换为6-bit字符串。对于单个字符,对应的6-bit字符串在表G-1(G)中指定;对于转义序列,对应的6-bit字符串在表G-1(G)中通过查找“URI形式”列中的转义序列指定。按输入的顺序连接这些6-bit字符串,然后添加6个零(000000)。

结果位串为可变长度,但它总是最小为6-bit,且总是6-bit的倍数。

“6-bit可变串分区表”编码方法

6-bit可变串分区表编码方法用于在URI中作为通过点(.)字符分隔的可变长数字域及可变长字符串域显示的段;以及在二进制编码中作为3-bit“分区”域后跟一个可变长二进制整数和一个空结尾二进制编码字符串显示的段。两个URI域的字符数量总是小于等于已知限制(3字符转义序列计为单个字符),并且二进制编码中的位个数也小于或等于已知限制。

6-bit可变串分区表编码方法使用分区表,此特定分区表在给定EPC scheme的编码表中指定。

输入: 编码方法的输入为编码表的“URI portion”列所指定的URI portion。它由一个点(.)字符所分隔的两个字符串组成。编码过程中,点左边和右边的字符串分别表示为 $C$ 和 $D$。

有效性测试: 输入必须满足以下条件:

  • 输入必须匹配6.3节的相应小节所指定的URI对应的portion语法。
  • $C$ 中数字个数必须匹配分区表的“GS1公司前缀数字(L)”列中指定的值之一。在剩余编码过程中,对应的行叫“匹配分区表行”。
  • $D$ 中的字符个数必须小于等于匹配分区表行的其他域最大字符数列中指定的相应值。在本规则中,转义三元组(%nn)计为一个字符。
  • 对于与第5节中指定语法的转义结果相匹配的 $D$ 的每个portion(即,由一个%字符后跟两个十六进制数字组成的3字符序列),%字符后面的两个十六进制字符必须映射到表G-1(G)中指定的39个允许字符之一。

输出: 通过连接以下三个组件构造输出位串:

  • $P$ 的值在匹配分区表行的“分区值”列中指定,是一个3-bit二进制整数。
  • $C$ 的值为一个十进制整数,转换为一个 $M$-bit二进制整数,其中 $M$ 为匹配分区表行的“GS1公司前缀位”列中指定的位个数。
  • $D$ 的值转换为一个 $N$-bit二进制串,其中 $N$ 小于等于匹配分区表行的其它域最大位行所指定的位个数。此二进制串的构造如下:假设 $D$ 为一或多个字符组成的字符串 $s_1 s_2 ... s_N$,其中,每个字符 $s_i$要么是单个字符,要么是与语法生成的转义匹配的3字符序列(其中,3字符序列由一个%和其后的两个十六进制数字组成)。将每个字符转换为6-bit字符串。对于单个字符,对应的6-bit字符串在表G-1(G)中指定。对于一个转义序列,6-bit字符串是被视为6-bit整数的两个十六进制字符的值。按输入顺序连接这些6-bit字符串,然后添加6个零。

得到的位串的长度是($3+M+N$),它总是小于等于编码表中所示的该段的最大“代码段比特数”。

“定长整数”编码方法

定长整数编码方法用于在URI中显示为填零十进制整数的段,以及在二进制编码中显示为二进制整数的段。

输入: 编码方法的输入是编码表中“URI portion”行指示的URI protion,它是一个没有点(.)字符的全数字字符串。

有效性测试: 输入字符串必须满足以下条件:

  • 它必须匹配第5章指定的PaddedNumericComponent的语法。
  • 当被视为非负十进制整数时,字符串的值必须小于 $((10^D)-1)$,$D=int(b×log(2)/log(10))$,其中 $b$ 的值由编码表的“代码段比特数”行指定。

如果上述任何测试失败,则URI编码失败。

输出: 此段的编码为一个 $b$-bit整数(如果需要,在左侧填零),其中,$b$ 是在编码表的“代码段比特数”行中指定的值,其值是被视为十进制整数的输入字符串的值。

解码过程

此过程将Gen 2标签的EPC内存区中从位 $20_h$ 开始的位串解码为EPC Tag URI。引过程仅解码EPC和过滤值(如果可以)。15.2.2节给出了解码EPC内存区整个内容的完整过程,包括存储在被编码EPC之外的控制信息。15.2.2节的过程将被用于大多数应用程序。(第15.2.2节中的过程使用下面的过程作为子程序。)

给定:

  • 一个由N-bit组成的位串 $b_{N-1} b_{N-2} ... b_0$

得到:

  • 一个以urn:epc:tag:开始的EPC Tag URI,它不包含控制信息域(如果EPC scheme包含过滤值,则包含过滤值);或
  • 一个异常,指示位串不能被解码为EPC Tag URI。

过程:

  1. 提取高8位EPC首部:$b_{N-1} b_{N-2} ... b_{N-8}$。参照14.2节中的表14-1,使用首部标识此二进制编码的编码表和编码位长度 $B$。如果不存在此首部的编码表,停止:此二进制编码不能被解码。
  2. 确认位 $N$ 的总数大于等于表14-1中为此首部指定的位 $B$ 的总数。如果不,则停止:此二进制编码不能被解码。
  3. 如有必要,截断输入的最低有效位,以匹配表14-1中规定的位数,即,如果表14-1指定 $B$ 位,则保留位 $b_{N-1} b_{N-2} ... b_{N-B}$。对于此过程的其余部分,请考虑将剩余位编号为 $b_{B-1} b_{B-2} ... b_0$。(此步骤的目的是删除由于面向字的数据传输而读取的任何尾部填零位。)
  4. 对于可变长度编码方案,表14-1没有指定 $B$,所以此步骤必须省略。步骤4在所有段解码之后,可能存在尾部填零位,如果是这样,则忽略它们。
  5. 根据编码表的“比特位置”行,将二进制编码的位分成若干段。对于每个段,对位进行解码以获得将用作最终URI的portion的字符串。解码每一列的方法取决于表中的“编码方法”行。如果“编码方法”行指定了特定位串,输入的相应位必须与这些位完全匹配;如果不,则停止:此二进制编码不能被解码。否则请参阅以下指定解码方法的部分。如果任何段的解码失败,请停止:此二进制编码无法解码。
  6. 对于可变长度的代码段,编码方法从上一代码列消耗的位之后的位开始应用。也就是说,如果前一个代码列(该列左边的列)消耗了位 $b_i$ 及以下的位,则用于解码该段的最高有效位是位 $b_{i-1}$。编码方法将确定该段的结束位在何处。
  7. 连接以下字符串以获取最终的URI:字符串urn:epc:tag:,编码表中指定的scheme名称,一个冒号(.)字符,步骤4获得的字符串,在相邻字符串之间插入点(.)。

以下部分指定步骤4中使用的过程。

“整数”解码方法

整数解码方法用于在URI中显示为十进制整数的段,以及在二进制编码中显示为二进制整数的段。

输入: 解码方法的输入是在编码表的“比特位置”行中标识的位串。

有效性测试: 针对此解码方法不存在有效性测试。

输出: 此段的解码是一个十进制数字,其值是被视为无符号二进制整数的输入值。如果输出为两或多个长度的位,不应当开始于一个零字符。

“字符串”解码方法

字符串解码方法用于在URI中显示为字母数字字符串的段,以及在二进制编码中显示为ISO 646(ASCII)编码的段。

输入: 解码方法的输入是编码表的“比特位置”行所标识的位串。此位串的长度总是7的倍数。

有效性测试: 输入位串必须满足以下条件:

  • 每7-bit段必须有一个与表A-1中指定字符相对应的值,或者全部为零。
  • 在全零段之后的所有7-bit段也必须是全零。
  • 第一个7-bit段不能全部为零。(也就是说,字符串必须包含至少一个字符)

如果任何以上测试失败,则段解码失败。

输出: 翻译每个7-bit段,直到但不包括第一个全零段(如果有的话),通过查找表A-1的7-bit段,并使用“URI形式”列中的值,将它们转换为单个字符或3字符转义三元组。按输入位串的顺序连接字符与/或3字符三元组。结果字符串就是输出。此字符串匹配第5节语法产生的GS3A3

“分区表”解码方法

分区表解码方法用于在URI中显示为由一个点(.)字符分隔的可变数字域的段,以及在二进制编码中显示为3-bit“分区”域后跟两个可变长二进制整数的段。两个URI域中的字符数总数始终为常量,二进制编码中的位数总和也同样为常量。

分区表解码方法使用一个“分区表”。要使用的特定分区表在给定EPC scheme的编码表中指定。

输入: 解码方法的输入是在编码表的“比特位置”行中标识的位串。逻辑上,此位串被分为三个子串,由一个3-bit“分区”值后跟两个可变长子串组成。

有效性测试: 输入必须满足以下条件:

  • 将输入位串的三个最高位视为二进制整数,它必须与分区表“分区值”列所指定的值相匹配。剩余解码过程中,对应的行被称为“匹配分区表行”。
  • 在三个分区位之后提取输入位串的 $M$ 个最高位,其中 $M$ 是在匹配分区表行的“公司前缀位”列中指定的值。将这些 $M$ 位视为无符号二进制整数 $C$。$C$ 的值必须小于 $10^L$,其中 $L$ 是匹配分区表行的“GS1公司前缀数字(L)”列中指定的值。
  • 输入位串中还剩余 $N$ 位,$N$ 的值在匹配分区表行的“其它域位”列中指定。它是一个无符号二进制整数 $D$。$D$ 的值必须小于 $10^K$,其中 $K$ 的值在匹配分区表行的“其它域数字(K)”列中指定。注意,如果 $K=0$,那么 $D$ 的值必须为零。

输出: 通过连接以下三个组件构造输出字符串:

  • 值 $C$ 转换为十进制数,左边填零(0)字符以达到 $L$ 位。
  • 点(.)字符。
  • 值 $D$ 转换为十进制数,左侧填零(0)字符以达到 $K$ 位。如果 $K=0$,不要在上面的点之后追加字符(这种情况下,当此段与下面的段结合时,最终的URI字符串将有两个相邻的点字符)。

“非填充分区表”解码方法

非填充分区表解码方法用于在URI中显示为由点(.)字符分隔的一对可变长数字域的段,以及在二进制编码中显示为一个3-bit“分区”域后跟两个可变长二进制整数的段。两个URI域的字符个数总是小于等于已经限制,并且二进制编码的位个数总是恒定值。

非填充分区表解码方法使用一个“分区表”,要使用的特定分区表在给定EPC scheme的编码表中指定。

输入: 解码方法的输入是编码表的“比特位置”行中标识的位串。逻辑上,此位串被划分为三个子串,由一个3-bit“分区”值后跟两个可变长子串组成。

有效性测试:

  • 输入位串的最高三位,当成一个二进制整数,必须匹配分区表“分区值”列所指定的值之一。在剩余的解码过程中,对应的行称为“匹配分区表行”。
  • 在三个分区位之后提取输入位串的 $M$ 个最高位,其中 $M$ 是在匹配分区表行的“公司前缀位”列中指定的值。将这些 $M$ 位视为无符号二进制整数 $C$。$C$ 的值必须小于 $10^L$,其中 $L$ 是匹配分区表行的“GS1公司前缀数字(L)”列中指定的值。
  • 输入位串中还剩余 $N$ 位,$N$ 的值在匹配分区表行的“其它域位”列中指定。将这些 $N$ 位视作无符号二进制整数 $D$。

输出: 通过连接以下三个组件构造输出字符串:

  • 值 $C$ 转换为十进制数,左侧填充零(0)字符以达到 $L$ 位。
  • 点(.)字符。
  • 值 $D$ 转换为十进制数,无前导零(除非如果 $D=0$,它转化为单个0)。

“字符串分区表”解码方法

字符串分区表解码方法用于在URI中显示为由一个点(.)分隔的一个可变长数字域和一个可变长字符串域的段,以及在二进制编码中显示为3-bit“分区”域跟随一个可变长二进制整数和一个可变长二进制编码字符串的段。两个URI域的字符数总是小于等于已经限制(将3字符转义序列视为单个字符),并且如有必要,二进制编码中的位数将被填充到一个恒定值。

分区表解码方法使用一个“分区表”,要使用的特定分区表在给定EPC scheme的编码表中指定。

输入: 解码方法的输入是编码表的“比特位置”行中标识的位串。逻辑上,此位串被划分为三个子串,由一个3-bit“分区”值后跟两个可变长子串组成。

有效性测试: 输入必须满足以下条件:

  • 将输入位串的最高三位当成一个二进制整数,它必须匹配分区表的“分区值”列所指定的值之一。在剩余解码过程中,所对应的行称为“匹配分区表行”。
  • 在三个分区位之后提取输入位串的 $M$ 个之后的最高位,$M$ 的值是匹配分区表行的“公司前缀位”列中指定。将这些 $M$ 位当成一个无符号二进制整数 $C$。$C$ 的值必须小于 $10^L$,其中 $L$ 的值在匹配分区表行的“GS1公司前缀数字(L)”列指定。
  • 此时在输入位串中还剩余 $N$ 位,$N$ 的值在匹配分区表行的“其它域位”列中指定。这些位必须由一或多个非零7-bit段后跟零或多个全零位组成。
  • 全零位(如果有)之前的非零7-bit段数必须小于等于 $K$,其中 $K$ 的值在匹配分区表行的“最大字符数”列中指定。
  • 每个非零7-bit段必须有一个对应于表A-1中指定字符的值。

输出: 通过连接以下三个组件构造输出字符串:

  • 值 $C$ 转换为十进制数字,左边填充零(.)字符以达到 $L$ 位长。
  • 一个点(.)字符。
  • 按如下方式确定字符串:通过在表A-1中查找7-bit段,并使用“URI形式”列中的值,将有效性测试确定的每个非零7-bit段转换为单个字符或3字符的转义三元组。按输入位串对应的顺序连接字符和/或3字符三元组。

“数字串”解码方法

数字串解码方法用于在URI中显示为一个可能包括前导零的数字串的段。在编码前,把“1”预先加入数字串前,可以将前导零保留在二进制编码中。

输入: 解码方法的输入为编码表的“比特位置”行所标识的位串。

有效性测试: 输入必须使下面的解码过程不会失败。

输出: 按如下方式构造输出字符串:

  • 将输入位串转换为不带前导零的十进制数字,其值是被视为无符号二进制整数的输入的值。
  • 如果上一步得到的数字不从字符1开始,停止:输入不合法。
  • 如果上一步得到的数字只包含一个字符,停止:输入不合法(因为这表示一个空数字串)。
  • 从数字中删除前导1字符。
  • 结果字符串就是输出结果。

“6-Bit GAGE/DoDAAC”解码方法

6-Bit GAGE/DoDAAC解码方法用于在URI中显示为5字符GAGE码或6字符DoDAAC码的段,以及在二进制编码中显示为36-bit编码位串的段。

输入: 解码方法的输入是由编码表的“比特位置”行所标识的位串。此位串的长度总是36-bit。

有效性测试: 输入位串必须满足以下条件:

  • 将位串视为由6个6-bit段组成,每个6-bit段必须为表G-1(G)所对应的值,除了第一个6-bit段的值有可能为100000。
  • 第一个6-bit段的值必须为100000,或对应于一个数字字符,或一个除了IO大写字母字符。
  • 剩余5个6-bit段必须对应于一个数字字符,或一个除了IO大写字母字符。

如果以上的任何测试失败,段编码失败。

输出: 如果第一个6-bit段的值为100000,则忽视它。通过查找表G-1(G)中的6-bit段并使用“URI形式”的值将剩余的5或6个6-bit段转换为单个字符。将字符以输入位串的顺序连接起来。结果字符串就是输出。此字符串匹配6.3.17节语法所生成的CAGECodeOrDODAAC

“6-bit可变串”解码方法

6-bit可变串解码方法用于在URI中显示为可变长字符串的段,以及在二进制编码中显示为可变长空结尾二进制编码字符串。

输入: 解码方法的输入是位串,它开始于上一个编码段之后的下一个最低位位置。这种解码方法只使用了这个位串的一部分,如下所述。

有效性测试: 输入必须使下面的解码过程不会失败。

输出: 按如下方式构建输出字符串:

  • 从输入的最高位开始,将输入分成相信的6-bit段,直到找到全零位(000000)组成的终止段。如果输入在找到全零段之前用尽,则停止:输入无效。
  • 终止段之前的6-bit段数必须大于等于最小字符数,小于等于编码表脚注中为此编码表列指定的最大字符数。否则,停止:输入无效。
  • 对于终止段之前的每个6-bit段,请参阅表G-1(G)以找到与6-bit段值对应的字符。如果表中不存在与6-bit段对应的字符,停止:输入无效。
  • 如果输入违反编码表中指定的任何其他约束,停止:输入无效。
  • 通过在表G-1(G)中查找6-bit段,并使用“URI形式”列的值将终止段之前的每个6-bit段转换为单个字符或3字符转义三元组。结果字符串就是解码过程的输出。
  • 如果编码表中仍有任何列,则下一列的解码过程在终止 000000 段后以下一个最低恢复。

“6-bit可变串分区表”解码方法

6-bit可变串分区表解码方法用于在URI中显示为由点(.)字符分隔的一个可变长数字域和一个可变长字符串域的段,以及在二进制编码中显示为3-bit“分区”域跟随一个可变长二进制整数和一个空结尾二进制编码字符串的段。两个URI域的字符数量总是小于等于已知限制(3字符转义序列作为单个字符),并且二进制编码中的位个数也小于已知限制。

6-bit可变串分区表解码方法使用一个“分区表”,所使用的分区表在给定EPC scheme的编码表中指定。

输入: 解码方法的输入是编码表的“比特位置”行中标识的位串。逻辑上,此位串分为三个子串,由一个3-bit“分区”值后跟两个可变长子串组成。

有效性测试: 输入必须满足以下条件:

  • 将输入位串的最高三位当成一个二进制整数,它必须匹配分区表的“分区值”列所指定的值之一。在剩余解码过程中,所对应的行称为“匹配分区表行”。
  • 在三个分区位之后提取输入位串的 $M$ 个之后的最高位,$M$ 的值是匹配分区表行的“公司前缀位”列中指定。将这些 $M$ 位当成一个无符号二进制整数 $C$。$C$ 的值必须小于 $10^L$,其中 $L$ 的值在匹配分区表行的“GS1公司前缀数字(L)”列指定。
  • 此时在输入位串中,最多有 $N$ 位剩余,$N$ 的值在匹配分区表行的“其它域最大位”列中指定。这些位必须开始于一或多个非零6-bit段后跟6个全零位。6个全零位之后的任何其他位在编码表中都属于的下一个代码段。
  • 全零位之前的非零6-bit段数必须小于等于 $K$,其中 $K$ 的值在匹配分区表行的“最大字符数”列中指定。
  • 每个非零6-bit段必须有一个对应于表G-1(G)中指定字符的值。

输出: 通过连接以下三个组件构建输出字符串:

  • 值 $C$ 转化为一个十进制数字,左边填零(0)字符以达到 $L$位长度。
  • 一个点(.)字符。
  • 按以下方式确定的字符串:通过在表G-1(G)中查找6-bit段并使用在“URI形式”列中找到的值,将有效性测试确定的每个非零6-bit段转换为单个字符或3字符转义三元组。按输入位串相应的顺序连接字符和/或3字符转义三元组。

“定长整数”解码方法

定长整数解码方法有和于在URI中显示为填零十进制整数的段,以及在二进制编码中显示为二进制整数的段。

输入: 解码方法的输入是由编码表的“比特位置”行所标识的位串。

有效性测试: 给定一个长度为 $b$ 的位序列,按如下方式计算 $i_{max}$ :

$D=int(b*log(2)/log(10))$ $i_{max}=10^D-1$

将长度为 $b$ 的位序列解释为非负整数值 $i$ 如果 $i>i_{max}$,则解码失败,因为 $i$ 对应于一个不能用数字 $D$ 表示的值。

输出: 此段的解码为一个十进制数字,它的值为将输入视作一个无符号二进制整数的值。输出需要在左边填零,以使总位数达到 $D$。

EPC二进制编码表

本节描述在14.3节编码过程和14.3.4节解码过程使用的编码表。

每个编码表的“比特位置”行指示了每个二进制编码中的段的相对比特位置。在“比特位置”行,最高下标表示最高位,下标0表示最低位。请注意,这与RFID标签内存区位地址通常指示的方式相反,其中地址0是最高位。

系列化全球贸易项目代码(SGTIN)

SGTIN指定了两个代码方案,一个是96-bit编码(SGTIN-96),另一个是198-bit编码(SGTIN-198)。SGTIN-198编码允许使用[GS1GS1]中规定的最多20个字母数字字符表示全范围序列号。SGTIN-96编码用于只有数字的序列号,无前导零,它的值小于 $2^{38}$(也就是0至274,877,906,943(包含))。

这两种SGTIN编码方案都引用了下面的分区表。

分区值 GS1公司前缀 指示符/填充数字和项目参考
位(M) 数字(L) 位(N) 数字
0 40 12 4 1
1 37 11 7 2
2 34 10 10 3
3 30 9 14 4
4 27 8 17 5
5 24 7 20 6
6 20 6 24 7
表 14-2:SGTIN分区表
SGTIN-96编码表
Scheme SGTIN-96
URI模板 urn:epc:tag:sgtin-96:F.C.I.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀(*) 指示符(**)/项目参考 系列
逻辑段比特数 8 3 3 20-40 24-4 38
代码段 EPC首部 过滤 GTIN 系列
URI protion F C.I S
代码段比特数 8 3 47 38
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b38 b37b36 ... b0
编码方法 00110000 整数 分区,表14-2 整数
表 14-3:SGTIN-96编码表

(*) 参考7.3.2节获取派生自GTIN-8的SGTIN的情况。

(**) 注意派生自GTIN-12或GTIN-13的SGTIN的情况,一个填零数字取代了指示数字。有关指示数字(或填零)和项目参考如何组合为EPC的这个段的定义,请参见7.2.3节。

SGTIN-198编码表
Scheme SGTIN-198
URI模板 urn:epc:tag:sgtin-198:F.C.I.S
位总数 198
逻辑段 EPC首部 过滤 分区 GS1公司前缀(*) 指示符(**)/项目参考 系列
逻辑段比特数 8 3 3 20-40 24-4 140
代码段 EPC首部 过滤 GTIN 系列
URI protion F C.I S
代码段比特数 8 3 47 140
比特位置 b197b196 ... b190 b189b188b187 b186b185 ... b140 b139b138 ... b0
编码方法 00110110 整数 分区,表14-2 整数
表 14-4:SGTIN-198编码表

(*) 参考7.3.2节获取派生自GTIN-8的SGTIN的情况。

(**) 注意派生自GTIN-12或GTIN-13的SGTIN的情况,一个填零数字取代了指示数字。有关指示数字(或填零)和项目参考如何组合为EPC的这个段的定义,请参见7.2.3节。

系列货运包装箱代码

SSCC规定了一个代码结构:96-bit编码SSCC-96。SSCC-96编码允许[GS1GS1]中规定的所有SSCC。

SSCC-96编码方案引用了以下分区表。

分区值(P) GS1公司前缀 扩展数字和系列参考
位(M) 数字(L) 位(N) 数字
0 40 12 18 5
1 37 11 21 6
2 34 10 24 7
3 30 9 28 8
4 27 8 31 9
5 24 7 34 10
6 20 6 38 11
表 14-5:SSCC分区表
SSCC-96编码表
Scheme SSCC-96
URI模板 urn:epc:tag:sscc-96:F.C.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 扩展/系列参考 (保留)
逻辑段比特数 8 3 3 20-40 38-18 24
代码段 EPC首部 过滤 SSCC (保留)
URI protion F C.S
代码段比特数 8 3 61 24
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b24 b23b22 ... b0
编码方法 00110001 整数 分区,表14-5 00...0(24位零)
表 14-6:SSCC-96编码表

具或不具扩展的全球位置码(SGLN)

SGLN规定了两种编码方案,96-bit编码(SGLN-96)和195-bit编码(SGLN-195)。SGLN-195编码允许[GS1GS1]中规定的最多20个字母数字字符的所有GLN扩展。SGLN-96则仅允许数字GLN扩展,无前导零,其值小于 $2^{41}$(也就是从0到2,199,023,255,551(包含))。注意值为 0 的扩展保留以指示SGLN相当于GS1公司前缀和位置参考所指示的GLN;

两个SGLN编码方案都引用以下分区表。

分区值(P) GS1公司前缀 位置参考
位(M) 数字(L) 位(N) 数字
0 40 12 1 0
1 37 11 4 1
2 34 10 7 2
3 30 9 11 3
4 27 8 14 4
5 24 7 17 5
6 20 6 21 6
表 14-7:SGLN分区表
SGLN-96编码表
Scheme SGLN-96
URI模板 urn:epc:tag:sgln-96:F.C.L.E
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 位置参考 扩展
逻辑段比特数 8 3 3 20-40 21-1 41
代码段 EPC首部 过滤 GLN 扩展
URI protion F C.L E
代码段比特数 8 3 44 41
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b41 b40b39 ... b0
编码方法 00110010 整数 分区,表14-7 整数
表 14-8:SGLN-96编码表
SGLN-195编码表
Scheme SGLN-195
URI模板 urn:epc:tag:sgln-195:F.C.L.E
位总数 195
逻辑段 EPC首部 过滤 分区 GS1公司前缀 位置参考 扩展
逻辑段比特数 8 3 3 20-40 21-1 140
代码段 EPC首部 过滤 GLN 扩展
URI protion F C.L E
代码段比特数 8 3 44 140
比特位置 b194b193 ... b187 b186b185b184 b183b182 ... b140 b139b138 ... b0
编码方法 00111001 整数 分区,表14-7 字符串
表 14-9:SGLN-195编码表

全球可回收资产标识(GRAI)

GRAI规定了两个编码方案,96-bit编码(GRAI-96)和170-bit编码(GRAI-170)。GRAI-170允许[GS1GS1]中规定的最多16个字母数字字符的全部系列号。GRAI-96编码可以表示数字系列号,无前导零,其值小于 $2^{38}$ (也就是从0到274,877,906,943(包括))。

只有包含可选系列号的GRAI可以表示为EPC。无系列号的GRAI表示一个资产类,而不是特定实体,因此不能被用作EPC(就像一个非序列化的GTIN可能不被用作EPC一样)。

两个GRAI编码结构都引用了以下分区表。

分区值(P) GS1公司前缀 资产类别
位(M) 数字(L) 位(N) 数字
0 40 12 4 0
1 37 11 7 1
2 34 10 10 2
3 30 9 14 3
4 27 8 17 4
5 24 7 20 5
6 20 6 24 6
表 14-10:GRAI分区表
GRAI-96编码表
Scheme GRAI-96
URI模板 urn:epc:tag:grai-96:F.C.A.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 资产类型 系列
逻辑段比特数 8 3 3 20-40 24-4 38
代码段 EPC首部 过滤 分区 + 公司前缀 + 资产类别 系列
URI protion F C.A S
代码段比特数 8 3 47 38
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b38 b37b36 ... b0
编码方法 00110011 整数 分区,表14-10 整数
表 14-11:GRAI-96编码表
GRAI-170编码表
Scheme GRAI-170
URI模板 urn:epc:tag:grai-170:F.C.A.S
位总数 170
逻辑段 EPC首部 过滤 分区 GS1公司前缀 资产类型 系列
逻辑段比特数 8 3 3 20-40 24-4 112
代码段 EPC首部 过滤 分区 + 公司前缀 + 资产类别 系列
URI protion F C.A S
代码段比特数 8 3 47 112
比特位置 b169b168 ... b162 b161b160b159 b158b157 ... b112 b111b110 ... b0
编码方法 00110111 整数 分区,表14-10 字符串
表 14-12:GRAI-170编码表

全球个人资产标识(GIAI)

GIAI规定了两个编码方案,96-bit编码(GIAI-96)和202-bit编码(GIAI-202)。GIAI-202编码允许最多24个由[GS1GS1]中规定的字母数字字符组成的所有系列号。GIAI-96编码则仅表示数字系列号,无前导零,其值的上限跟随GS1公司的前缀长度而变化。

两个GIAI编码方案引用了不同的分区表,在下面小节的相应编码表旁边指定。

GIAI-96分区表和编码表

GIAI-96编码方案使用了以下分区表。

分区值(P) GS1公司前缀 个人资产参考
位(M) 数字(L) 位(N) 最大数字(K)
0 40 12 42 13
1 37 11 45 14
2 34 10 48 15
3 30 9 52 16
4 27 8 55 17
5 24 7 58 18
6 20 6 62 19
表 14-13:GIAI-96分区表
Scheme GIAI-96
URI模板 urn:epc:tag:giai-96:F.C.A
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 个人资产参考
逻辑段比特数 8 3 3 20-40 62-42
代码段 EPC首部 过滤 GIAI
URI protion F C.A
代码段比特数 8 3 85
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b0
编码方法 00110100 整数 未填充分区,表14-13、表14-14
表 14-14:GIAI-96编码表
GIAI-202分区表和编码表

GIAI-202编码方案使用以下分区表。

分区值(P) GS1公司前缀 个人资产参考
位(M) 数字(L) 位(N) 最大字符
0 40 12 148 18
1 37 11 151 19
2 34 10 154 20
3 30 9 158 21
4 27 8 161 22
5 24 7 164 23
6 20 6 168 24
表 14-15:GIAI-202分区表
Scheme GIAI-202
URI模板 urn:epc:tag:giai-202:F.C.A
位总数 202
逻辑段 EPC首部 过滤 分区 GS1公司前缀 个人资产参考
逻辑段比特数 8 3 3 20-40 168-148
代码段 EPC首部 过滤 GIAI
URI protion F C.A
代码段比特数 8 3 191
比特位置 b201b200 ... b194 b193b192b191 b190b189 ... b0
编码方法 00111000 整数 字符串分区,表14-15
表 14-16:GIAI-202编码表

全球服务关系代码(GSRN)

GSRN规定了两种编码方案:96-bit编码GSRN-96和96-bit编码GSRNP-96。两个GSRN编码都可以表示[GS1GS]中规定的所有GSRN代码。

两个GSRN编码方案都引用了以下分区表。

分区值(P) GS1公司前缀 服务参考
位(M) 数字(L) 位(N) 最大字符
0 40 12 18 5
1 37 11 21 6
2 34 10 24 7
3 30 9 28 8
4 27 8 31 9
5 24 7 34 10
6 20 6 38 11
表 14-17:GSRN分区表
GSRN-96编码表
Scheme GSRN-96
URI模板 urn:epc:tag:gsrn-96:F.C.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 服务关系 (保留)
逻辑段比特数 8 3 3 20-40 38-18 24
代码段 EPC首部 过滤 GSRN (保留)
URI protion F C.S
代码段比特数 8 3 61 24
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b24 b23b22 ... b0
编码方法 00101101 整数 分区,表14-17 00...0(24-bit 0)
表 14-18:GSRN-96编码表
GSRNP-96编码表
Scheme GSRNP-96
URI模板 urn:epc:tag:gsrnp-96:F.C.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 服务关系 (保留)
逻辑段比特数 8 3 3 20-40 38-18 24
代码段 EPC首部 过滤 GSRN (保留)
URI protion F C.S
代码段比特数 8 3 61 24
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b24 b23b22 ... b0
编码方法 00101110 整数 分区,表14-17 00...0(24-bit 0)
表 14-19:GSRNP-96编码表

全球文档类型标识(GDTI)

GDTI规范有三个编码方案,96-bit编码(GDTI-96)、113-bit编码(GDTI-113,不推荐为TDS 1.9)以及174-bit编码(GDTI-174)。GDTI-174编码可表示[GS1GS]中规定的最多17个字母数字字符组成的全范围文档序列。不推荐使用GDTI-113编码,它表示较少的文档序列号的范围,最多17个数字字符(包括前导零),如[GS1GS11.0]中最初指定的那样。GDTI-96编码表示无前导零的文档系列号,其值小于 $2^{41}$ (也就是从0到2,199,023,255,551(包含))。

只有包含可选系列号GDTI可以表示为EPC。无系列号的GDTI表示一个文档类,而不是具体文档,因此不能作为一个EPC(就如无系列号GTIN不能作为EPC使用)。

所有GDTI编码方案都引用以下分区表。

分区值(P) GS1公司前缀 文档类型
位(M) 数字(L) 位(N) 数字
0 40 12 1 0
1 37 11 4 1
2 34 10 7 2
3 30 9 11 3
4 27 8 14 4
5 24 7 17 5
6 20 6 21 6
表 14-20:GDTI分区表
GDTI-96编码表
Scheme GDTI-96
URI模板 urn:epc:tag:gdti-96:F.C.D.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 文档类型 系列
逻辑段比特数 8 3 3 20-40 21-1 41
代码段 EPC首部 过滤 分区 + 公司前缀 + 文档类型 系列
URI protion F C.D S
代码段比特数 8 3 44 41
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b41 b40b39 ... b0
编码方法 00101100 整数 分区,表14-20 整数
表 14-21:GDTI-96编码表
GDTI-113编码表
Scheme GDTI-113
URI模板 urn:epc:tag:gdti-113:F.C.D.S
位总数 113
逻辑段 EPC首部 过滤 分区 GS1公司前缀 文档类型 系列
逻辑段比特数 8 3 3 20-40 21-1 58
代码段 EPC首部 过滤 分区 + 公司前缀 + 文档类型 系列
URI protion F C.D S
代码段比特数 8 3 44 58
比特位置 b112b111 ... b105 b104b103b102 b101b100 ... b58 b57b56 ... b0
编码方法 00111010 整数 分区,表14-20 数字串
表 14-22:GDTI-113编码表
GDTI-174编码表
Scheme GDTI-174
URI模板 urn:epc:tag:gdti-174:F.C.A.S
位总数 174
逻辑段 EPC首部 过滤 分区 GS1公司前缀 文档类型 系列
逻辑段比特数 8 3 3 20-40 21-1 119
代码段 EPC首部 过滤 分区 + 公司前缀 + 文档类型 系列
URI protion F C.A S
代码段比特数 8 3 44 119
比特位置 b173b172 ... b166 b165b164b163 b162b161 ... b119 b118b117 ... b0
编码方法 00111110 整数 分区,表14-20 字符串
表 14-23:GDTI-174编码表

CPI标识(CPI)

CPI标识符规定了两个编码方案:96-bit方案CPI-96和可变长编码CPI-var。CPI-96使用分区表39,CPI-var使用分区表40。

分区值(P) GS1公司前缀 组件/部件参考
位(M) 数字(L) 位(N) 最大数字数
0 40 12 11 3
1 37 11 14 4
2 34 10 17 5
3 30 9 21 6
4 27 8 24 7
5 24 7 27 8
6 20 6 31 9
表 14-24:CPI-96分区表
分区值(P) GS1公司前缀 组件/部件参考
位(M) 数字(L) 最大位数**(N) 最大字符数
0 40 12 114 18
1 37 11 120 19
2 34 10 126 20
3 30 9 132 21
4 27 8 138 22
5 24 7 144 23
6 20 6 150 24
表 14-25:CPI-var分区表

**: 位的数量依赖于组件/部件参考的字符数;参考14.3.9和14.4.9节。

CPI-96编码表
Scheme CPI-96
URI模板 urn:epc:tag:cpi-96:F.C.P.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 组件/部件参考 系列
逻辑段比特数 8 3 3 20-40 31-11 31
代码段 EPC首部 过滤 组件/部件标识 组件/部件系列号
URI protion F C.P S
代码段比特数 8 3 54 31
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b31 b30b29 ... b0
编码方法 00111100 整数 非填充分区,表14-24 整数
表 14-26:CPI-96编码表
CPI-var编码表
Scheme CPI-var
URI模板 urn:epc:tag:cpi-var:F.C.P.S
位总数 变量:在86和224(包含) bit之间
逻辑段 EPC首部 过滤 分区 GS1公司前缀 组件/部件参考 系列
逻辑段比特数 8 3 3 20-40 12-150(可变) 40(固定)
代码段 EPC首部 过滤 组件/部件标识 组件/部件系列号
URI protion F C.P S
代码段比特数 8 3 最多173 bit 40
比特位置 bB-1bB-2 ... bB-8 bB-9bB-10bB-11 bB-12bB-13 ... b40 b39b38 ... b0
编码方法 00111101 整数 6-Bit可变字符串分区,表14-24 整数
表 14-27:CPI-var编码表

全球优惠券代码(SGCN)

SGCN指定了一个单独的96-bit编码方案(SGCN-96),允许使用[GS1GS]中规定的最多12个数字字符(包括前导零)的全范围优惠券系列组件号。只有包含了系列号的SGCN可以表示为EPC。不带系列号的GCN表示的一个优惠券类,而不是具体优惠券,因此不能作为EPC使用(就好比非系列GTIN不能用作EPC)。

SGCN编码方案引用以下分区表。

分区值(P) GS1公司前缀 优惠券参考
位(M) 数字(L) 位数(N) 数字
0 40 12 1 0
1 37 11 4 1
2 34 10 7 2
3 30 9 11 3
4 27 8 14 4
5 24 7 17 5
6 20 6 21 6
表 14-28:SGCN分区表
SGCN-96编码表
Scheme SGCN-96
URI模板 urn:epc:tag:sgcn-96:F.C.D.S
位总数 96
逻辑段 EPC首部 过滤 分区 GS1公司前缀 优惠券参考 系列组件
逻辑段比特数 8 3 3 20-40 21-1 41
代码段 EPC首部 过滤 分区 + 公司前缀 + 优惠券参考 系列
URI protion F C.D S
代码段比特数 8 3 44 41
比特位置 b95b94 ... b88 b87b86b85 b84b83 ... b41 b40b39 ... b0
编码方法 00111111 整数 分区,表14-28 数字串
表 14-27:CPI-var编码表

贸易项目组件标识代码(ITIP)

ITIP指定了两个编码方案,110-bit编码(ITIP-110)和212-bit编码(ITIP-212)。ITIP-212编码允许[GS1GS]中指定的最多20个字母数字字符的全部序列号。ITIP-110编码允许数字序列号,无前导零,其值小于 $2^{38}$ (也就是从0到274,877,906,943(包含))。

两个ITIP编码方案都引用以下分区表。

分区值(P) GS1公司前缀 指示/填充 数字和项目参考
位数(M) 数字(L) 位数(N) 数字
0 40 12 4 1
1 37 11 7 2
2 34 10 10 3
3 30 9 14 4
4 27 8 20 6
5 24 7 20 6
6 20 6 24 7
表 14-30:ITIP分区表
ITIP-110编码表
Scheme ITIP-110
URI模板 urn:epc:tag:itip-110:F.C.I.PT.S
位总数 110
逻辑段 EPC首部 过滤 分区 GS1公司前缀(*) 指示(**)/项目参考 组件 总数 系列
逻辑段比特数 8 3 3 20-40 24-4 7 7 38
代码段 EPC首部 过滤 GTIN 组件 总数 系列
URI protion F C.I P T S
代码段比特数 8 3 47 7 7 38
比特位置 b109b108 ... b102 b101b100b99 b98b97 ... b52 b51b50 ... b45 b44b43 ... b38 b37b36 ... b0
编码方法 01000000 整数 分区,表14-2 定长整数 定长整数 整数
表 14-31:ITIP-110编码表

(*): 参考7.3.2节获取派生自GTIN-8的SGTIN实例。

(**): 注意派生自GTIN-12或GTIN-13的ITIP情况,一个零填充数字代替了指示数字。在所有情况下,参考7.3.2节获取指示数字(或填零)以及项目参考是如何合并到EPC段的。

ITIT-212编码表
Scheme ITIP-110
URI模板 urn:epc:tag:itip-212:F.C.I.PT.S
位总数 212
逻辑段 EPC首部 过滤 分区 GS1公司前缀(*) 指示符(**)/项目参考 组件 总数 系列
逻辑段比特数 8 3 3 20-40 24-4 7 7 140
代码段 EPC首部 过滤 GTIN 组件 总数 系列
URI protion F C.I P T S
代码段比特数 8 3 47 7 7 140
比特位置 b211b210 ... b204 b203b202b201 b200b199 ... b154 b153b152 ... b147 b146b145 ... b140 b139b138 ... b0
编码方法 01000001 整数 分区,表14-2 定长整数 定长整数 字符串
表 14-32:ITIP-212编码表

(*): 参考7.3.2节获取派生自GTIN-8的SGTIN实例。

(**): 注意派生自GTIN-12或GTIN-13的ITIP情况,一个零填充数字代替了指示数字。在所有情况下,参考7.3.2节获取指示数字(或填零)以及项目参考是如何合并到EPC段的。

通过标识符(GID)

GID仅指定了一种编码方案:96-bit编码GID-96。无需分区表。

GID-96编码表
Scheme GID-96
URI模板 urn:epc:tag:gid-96:M.C.S
位总数 96
逻辑段 EPC首部 通用管理者代码 对象类 系列号
逻辑段比特数 8 28 24 36
代码段 EPC首部 通用管理者代码 对象类 系列号
URI protion M C S
代码段比特数 8 28 24 36
比特位置 b95b94 ... b88 b87b86b60 b59b58 ... b36 b35b34 ... b0
编码方法 00110101 整数 整数 整数
表 14-33:GID-96编码表

DoD标识符、

在撰写本文时,DoD编码的细节在一份名为“美国国防部供应商的无源RFID信息指南”的文件中进行了解释,该文件可在美国国防部网站上获得(http://www.dodrfid.org/supplierguide.htm)。

ADI标识(ADI)

ADI标识仅指定了一种编码方案:可变长编码ADI-var。无需分区表。

ADI-var编码表
Scheme ADI-var
URI模板 urn:epc:tag:adi-var:F.D.P.S
位总数 变量:在68和434(包含) bit之间
逻辑段 EPC首部 过滤 CAGE/DoDAAC 零件号 系列号
逻辑段比特数 8 6 36 变量 变量
代码段 EPC首部 过滤 CAGE/DoDAAC 零件号 系列号
URI protion F D P S
代码段比特数 8 6 36 变量(6-198) 变量(12-186)
比特位置 bB-1bB-2 ... bB-8 bB-9bB-10bB-14 bB-15bB-16 ... bB-50 bB-51bB-52 ... b1b0
编码方法 00111011 整数 6-bit CAGE/DoDAAC 6-bit可变字符串 6-bit可变字符串
表 14-34:ADI-var编码表

注意:

零件号段的字符数必须大于等于0,并小于等于32。在二进制编码中,总是存在一个6-bit终止符。

系列号段的字符数必须大于等于1,并小于等于30。在二进制编码中,总是存在一个6-bit终止符。

“#”字符(在URI中由转义序列 %23表示)可能显示为系列号段的第一个字符,但在零件号段或系列号段的其他位置可能不会出现。

;

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