一、EPC
即电子产品编码。
EPC
统一了全球物品的编码方法。但当前基本采用条形码的方式。
1.EPC系统
应答器(商品标签)+阅读器+Savant(专家软件、中间件)服务器+ONS(对象域名解析服务)+EPCIS(EPC信息服务器)
2.EPC编码
二、ONS解析
ONS
即对象域名解析服务,类似DNS。
-
在EPC系统中,需要将
EPC编码
和商品信息匹配,而相应的商品信息存储在对应的EPCIS服务器中。 -
ONS提供与EPC编码对应的
EPCIS服务器地址
。
ONS架构图:
阅读器
将读到的EPC编码上传到本地服务器
。有本地服务器安装的Savant
软件对信息集中处理。
本地服务器通过本地ONS服务器或路由器到达远程ONS
服务器,查找所需EPC编码对应的EPCIS服务器地址,然后本地服务器就可以与对应的EPCIS
服务器通信。
本地网中应有获取信息较快的ONS换从存储器,而不必每次都需要因特网或VPN专线获取ONS服务
三、解析案例
- 长度64,计算前两位位1即版本为type1
- 根据上方表格0-1位为版本号,2-22位是域名管理……
四、python实现
# 判断epc类型并转化为点十进制格式返回
def judgment(epc0b, code_type):
length = len(epc0b)
version_type1 = int(epc0b[:2], 2)
version_type2 = int(epc0b[:8], 2)
if length == 64 and version_type1 == 1:
return transform(epc0b, code_type[0])
if length == 64 and version_type1 == 2:
return transform(epc0b, code_type[1])
if length == 64 and version_type1 == 3:
return transform(epc0b, code_type[2])
if length == 96:
return transform(epc0b, code_type[3])
if length == 256 and version_type2 == 1:
return transform(epc0b, code_type[4])
if length == 256 and version_type2 == 2:
return transform(epc0b, code_type[5])
if length == 256 and version_type2 == 3:
return transform(epc0b, code_type[6])
# 根据epc类型返回十进制格式
def transform(epc0b, code_type):
results = []
flag = 0
# 按位置和位数将二进制转多个十进制,并用.隔开
for i in code_type:
temp = int(epc0b[flag:flag + i], 2)
flag += i
results.append(temp)
return ".".join(str(temp) for temp in results)
# 根据十进制格式返回最后的URL
def address(class_ip, suffix_name):
str_numbers = class_ip.split('.')
int_number = [int(num) for num in str_numbers]
print(f"序列号:{int_number[-1]}")
# 去除序列号,并将整个列表反转
reversed_numbers = int_number[:-1][::-1]
# 合并后缀为最终URL地址
string = ".".join(str(temp) for temp in reversed_numbers) + suffix_name
return string
# --------------------------------------------数据准备------------------------------------------
code = (
(2, 21, 17, 24), (2, 15, 13, 34), (2, 26, 13, 23), (8, 28, 24, 36), (8, 32, 56, 160), (8, 64, 56, 128),
(8, 128, 56, 64))
test = '0100000000000000000001000000000000011000000000000000000110010000'
suffix = ".onsroot.org"
# ----------------------------------------------测试----------------------------------------------
result = judgment(test, code)
url = address(result, suffix)
print(result)
print(f"ONS解析得到URL:{url}")