You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3实现NFC UID的Hex/Dec/Byte转换及不同读卡器读数匹配问题

NFC UID匹配验证步骤
  • 第一步:修正简易读卡器的乱码输出,将所有ö字符替换为0,得到纯数字字符串,你当前测试的标签对应结果为2077871305
  • 第二步:将上述十进制数字转换为4字节长度的十六进制字符串,得到7bd9ccc9
  • 第三步:将该十六进制字符串按每2位为一组拆分,倒序排列后重新拼接,得到c9ccd97b
  • 第四步:对比拼接结果和ACR122U读取的UID,二者一致即可证明两台设备读取的是同一张标签

"8 no. in HEX reverse"含义及Python实现

模式含义

该配置项的完整含义为:将读取到的4字节NFC UID(对应8个十六进制字符)按字节序反转后,输出为十六进制格式的结果。其中8 no.指代UID对应的8个十六进制字符,reverse指代字节序反转操作,也就是常说的大小端转换。

你遇到的输出差异本质是两台设备的默认输出规则不同:

  • ACR122U默认输出大端序的十六进制UID
  • 简易读卡器默认输出小端序UID对应的十进制值,且在非Windows系统下会因为编码映射问题将0显示为ö

Python实现转换逻辑

从ACR122U结果转换为简易读卡器输出

# ACR122U读取到的UID
acr_uid = "c9ccd97b"
# 转字节后反转字节序,再转十进制整数
reader_output = int.from_bytes(bytes.fromhex(acr_uid)[::-1], byteorder="big")
print(reader_output)  # 输出结果:2077871305

从简易读卡器输出转换为ACR122U结果

# 替换乱码后的简易读卡器输出
reader_output = "2077871305"
# 转4字节后反转字节序,再转十六进制字符串
acr_uid = int(reader_output).to_bytes(4, byteorder="big")[::-1].hex()
print(acr_uid)  # 输出结果:c9ccd97b

内容的提问来源于stack exchange,提问作者Gábor Erdős

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:54:03