【问题标题】:UID of Type V tag seems to be "backwards"V 型标签的 UID 似乎是“倒退”
【发布时间】:2013-11-12 13:36:56
【问题描述】:

我正在构建一个应用程序,它使用 RFID 标签来识别用户,使用 NFC。我可以正确读取标签,没有问题。但是,当我使用“NFC TagInfo”应用程序时,我从 Type V 标签收到了这个 ID:

e00401007539c2d3

我自己读标签的时候,UID完全倒退了:

d3c23975000104e0

Type V 标签的射频技术是Type V (ISO/IEC 15693 / Vicinity)。我的代码似乎没有任何问题,因为其他标签(Type A (ISO/IEC 14443 Type A) 工作正常。这就是我将byte[] 转换为String 的方式:

public static String tagFromByte(byte[] __tagId) {
    String tagId = "";

    for (byte b: __tagId) {
        tagId += String.format("%02x", b);
    }

    return tagId;
}

根据documentation

ID 的大小和格式特定于标签使用的射频技术。

我尝试搜索有关如何读取特定技术的 UID 的更多信息,但找不到任何信息。

更新 here我找到了,它是根据文档。但是,这就引出了一个问题,如何让标签的射频技术用于触发正确的 UID byte[]-to-string 实现?

【问题讨论】:

    标签: android nfc iso-15693


    【解决方案1】:

    你正在记录你的标签从 0 到 7,而它应该是相反的。

    tagId[0] 字节是最低有效字节,因此位于末尾。

    像这样记录:

    for (int i = _tagId.length(); i > 0; --i) {
        tagId += String.format("%02x", _tagId[i]);
    }
    

    【讨论】:

    • 我明白,但这会破坏 TypeA 标签(它们会倒退)。不过,我似乎找到了答案。 getTechList 给了我使用的 RF 技术类型,我可以使用它来触发正确的字节数组到字符串的转换。
    【解决方案2】:

    Turnsout,每个技术的 UID 并不总是相同的。这是解决方案。检查正在使用哪种技术并调用正确的函数以将 id 作为String

    protected String getId(Tag tag) {
    String id = null;
    
    if (NfcA.get(tag) != null) {
            id = byteToString(tag.getId());
        } else if (NfcV.get(tag) != null) {
            id = byteToStringReversed(tag.getId());
        }
        return id;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多