ONS解析

一、EPC

即电子产品编码。

EPC统一了全球物品的编码方法。但当前基本采用条形码的方式。

1.EPC系统

应答器(商品标签)+阅读器+Savant(专家软件、中间件)服务器+ONS(对象域名解析服务)+EPCIS(EPC信息服务器)

2.EPC编码

IMG_20230609_125803_edit_3847710128058(1)

二、ONS解析

ONS即对象域名解析服务,类似DNS。

  • 在EPC系统中,需要将EPC编码和商品信息匹配,而相应的商品信息存储在对应的EPCIS服务器中。

  • ONS提供与EPC编码对应的EPCIS服务器地址

ONS架构图:
202306091309370.drawio

阅读器将读到的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}")

五、运行结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值