EPC编码:尝试为所有物理对象编码

安全 应用安全
编码是我们日常生活中不可或缺的一部分。我们人类自己就拥有很多不同的编码,比如身份证号,学号,工号,在不同的场景下,利用不同的编码可以精准地识别定位每一个人。

编码是我们日常生活中不可或缺的一部分。我们人类自己就拥有很多不同的编码,比如身份证号,学号,工号,在不同的场景下,利用不同的编码可以精准地识别定位每一个人。物品也被编码,如资产分类号、图书分类号、设备铭牌等,这些物品编码有的是对物品进行归类,如图书分类号,扫码后能够区分同一种图书,而不能区分每一本书;有的是针对每一件物品编码,如电子产品序列号等。这种唯一表示某一件物品的编码可以写入标签,形成单品级标签。物联网获得迅速发展,与这种编码息息相关。

为了实现单品识别,1999年,美国麻省理工学院的自动识别研究中心(Auto-ID Center)开发了EPC,旨在为每一个单品提供一个唯一的号码——EPC码,利用RFID技术,构造一个实现全球物品信息实时共享的物联网。

什么是EPC编码?

EPC的全称是Electronic Product Code,中文称为产品电子代码。EPC是建立在EAN.UCC(即全球统一标识系统)条型编码的基础上,并对该条形编码系统做了扩充,它的目标是为特定的物理对象提供唯一标识的特定标识符,这种标识在全球所有的物理对象中都是独一无二的,从而实现全球范围内对单件产品的跟踪和追踪。也就是说,EPC编码是要将已知的编码纳入并整合起来,建立更为开放的编码体系。EPC编码的载体就是RFID电子标签,其借助网络来实现信息的传递和诸如固定资产、文件等重要物品的追踪。

EPC编码体系包括通用标识符(GID)、基于EAN•UCC的全球贸易产品码、美国国防部标识符(DoD)等16种编码方案。如图1所示:

图 1 EPC编码体系

EPC编码URI格式

EPC作为一种统一编码标识符(URI)的编码规范如下所示:

urn:epc:id:scheme:component1.component2.…

其中,scheme表示EPC兼容的编码方案名称,Component1、Component2……表示在该编码方案下的具体编码部件。例如,urn:epc:id:sgtin:0614141.112345.400,该EPC编码表达的是全球贸易产品码SGTIN是0614141112345400的URI,其中Component1表示的是SGTIN的GS1 Company Prefix,取值是0614141;Component2表示的是Item Reference,取值是112345;Component3表示的是Serial Number,取值是400。

这样,EPC就将各种编码串了起来,建立起更为庞大开放的编码体系,如图2所示。对于GIAI等已经是单品级编码的,在EPC体系中可以一一对应,对于GTIN等类别编码,通过增加序列号serial numbers,也在EPC体系中有了映射。

图 2 EPC标识符命名空间说明图

EPC编码二进制格式

EPC的URI格式可以很好地应用在信息系统中。但在标签中,我们用这么长的编码却很不方便。因此,EPC编码还包括了适用于标签形态的二进制编码格式,以及URI格式和二进制格式的互相转化方法。

图 3 EPC二进制编码格式

EPC二进制编码格式如图3所示。它是由一个版本号和另外三段数据(依次为域名管理码、对象种类、序列号)组成的一组数字。其中:

  • 版本号(header)标识EPC的长度、类型、结构、版本号,它使得以后的EPC可有不同的长度或类型;
  • 域名管理码(EPC Manager Number)负责描述与此EPC相关的生产厂商的信息,例如“可口可乐公司”;
  • 对象种类(Object Class)记录产品精确类型的信息,例如:美国生产的330ml罐装柠檬味可乐(可口可乐的一个种类);
  • 序列号(Serial Number)唯一标识货品,它会精确的告诉我们所说的究竟是哪一罐330ml罐装减肥可乐。

以SGTIN编码方式为例,我们有SGTIN编码30.7800190.000060.000000010,其中30是版本号,7800190是域名管理码,需要符合EPC的要求,而对象种类000060和序列号000000010由编码使用者定义。

目前,EPC 编码的二进制格式有96 位、170位等多种,其中版本号(Header)是固定的8位,其余三段数据的长度是不固定的,以SGTIN-96编码方式为例,我们有SGTIN-96编码30.7800190.000060.000000010,其中30是版本号,7800190是域名管理码,均由EPC组织决定的,而对象种类000060和序列号000000010是由公司管理者决定的。96位的SGTIN-96编码方式可以为2.68亿公司赋码,每个公司可以有1600万产品分类,每类产品有680亿的独立产品编码,形象的说可以为地球上的每一粒大米赋一个唯一的编码。

下面我们看一下EPC编码的URI格式和二进制格式是如何互相转化的。比如对于96位的二进制EPC码:

307800190000060000000010

图 4 二进制码转换

二进制码转换为EPC编码的URI格式过程如下:

  • 0011 0000:对应的是全球贸易产品码SGTIN-96
  • 011:是filter,对应全球贸易产品的类型
  • 110:是partition,如图5所示,这三位决定了CompanyPrefix和ItemReference各占多少位,110=6,决定了CompanyPrefix占20位,ItemReference占24位
  • 00 0000 0000 0001 1001 00: CompanyPrefix(20位),值为100
  • 00 0000 0000 0000 0000 0110 00:ItemReference(24位),值为24
  • 00 0000 0000 0000 0000 0000 0000 0000 0001 0000 :SerialNumber(38位)值为16

那么,最后的URI格式编码为:

urn:epc:id:sgtin:100.24.16

图 5 partition 表

如上所述,不同的Header值决定了不同的编码方式,在将二进制格式转换为URI格式时,不同的Header值对应的filter、partition、CompanyPrefix 和ItemReference位数都不相同,下面我们看一下美国国防部EPC编码的标准

美国国防部的标准

美国军方从1990年海湾战争开始就开始使用RFID技术,利用RFID技术对军用物资进行运输管理,主要是对运输箱、集装箱上粘贴RFID标签。现如今,美国国防部发出的运输商要求中对RFID提出了更加严格的要求。目前,美国国防部要求使用96位的编码方式,96位的编码由以下四个字段组成,在确定了所有字段值之后,标签的整个内容可以被看作是一个用于识别到国防部的货物的唯一编号。

Header:图2中的详细说明是国防部所接受的唯一报头以及相应的二进制代码。

Filter:使用二进制数字来标识托盘、容器(船舶和外部集装箱)或贴有标签的包装:➡0000 = 托盘

  • 0001 = 容器(船舶和外部集装箱)
  • 0010 = 贴有标签的包装
  • 其他组合 = 供以后使用

但是要注意的是在美国国防部的96位标准中筛选器(Filter)的值不用于决定EPC码的唯一性。举个例子来说,美国国防部不允许将两个EPC相同但是筛选器值不同的RFID标签粘贴到两个不同的物体上。

Government Managed Identifier:这一部分代表各个供应商的商业和政府代码,此代码标识每个供应商并确保所有供应商序列号的唯一性,此标识用8位ASCII格式表示。

Serial Number:序列号这个字段可以标识= 68719476736个项目,序列号转换成二进制格式后,必须用0填充到36位。RFID标签中所要求的“序列号”并不是指正在发送产品的序列号,而是由供应商指定的一个特定的RFID标签唯一编号。

综上,EPC编码可以为所有实体提供唯一标识,通过不同的字段标识不同领域,扫描粘贴在物体表面RFID标签,就可以知道这个物体的信息,流向,并在计算机网络标识这个物体,从而实现信息的传递和物体的追踪。EPC编码体系的构造对于目前各单位、各省份单独管理的编码整合、物理空间与信息空间编码的统一具有借鉴意义。

【本文为51CTO专栏作者“中国保密协会科学技术分会”原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2011-07-07 10:39:07

Cocoa 函数

2011-07-07 10:29:35

Cocoa 方法 框架

2010-03-11 16:03:04

Python prin

2015-07-31 10:31:20

Linux 内核编码规范

2015-07-30 10:51:42

Linux内核Linux

2023-11-09 19:12:43

AIoTel视频编码

2012-01-13 12:21:45

Java

2009-06-08 19:52:47

Eclipse字符编码

2015-09-29 10:07:58

中文编码

2013-04-08 10:33:54

编码编码规范

2010-06-03 16:02:03

LTE

2020-04-08 12:50:29

Python编程语言开发

2024-02-28 23:07:42

GolangBase64编码

2020-11-24 10:03:41

编码程序员技术

2011-07-07 10:18:58

Cocoa 实例变量 数据

2014-09-19 15:30:26

2023-04-13 00:24:00

前端编码JavaScrip

2010-09-06 09:06:22

CSS

2020-11-05 10:20:54

前端编码规范安全漏洞

2015-03-18 09:34:47

程序员编码规范
点赞
收藏

51CTO技术栈公众号