uniqueidentifier - Mifare 卡 : distinguish between 4-byte and 7-byte UIDs

标签 uniqueidentifier rfid mifare smartcard-reader contactless-smartcard

我有一个总是报告 64 位的读卡器,可以读取 4 或 7 字节 UID 的卡。

例如,我看到它可以报告:

  • 04-18-c5-82-00-00-00-00 - uid0-uid1-uid2-uid3-00-00-00-00
  • 形式的 4 字节 UID
  • 04-18-c5-82-f1-3b-81-00 - uid0-uid1-uid2-uid3-uid4-uid5-uid6-00
  • 形式的 7 字节 UID

    是什么阻止了 7 字节的 UID 将 uid4、uid5 和 uid6 设置为零?这是否包含在规范中?如果是这样,哪个规范?

    最佳答案

    是什么阻止了 7 字节的 UID 将 uid4、uid5 和 uid6 设置为零?

    没有什么。 UID 的格式(由 MIFARE 卡使用)在 ISO/IEC 14443-3 中定义。特别是对于 MIFARE 卡,NXP 有(或至少有?)一些用于 4 字节 UID 的进一步分配逻辑,但这不是公开可用的。

    是否可以区分这两种情况?

    如果阅读器完全按照您在示例中显示的形式输出 UID,那么答案是否定的(至少不可靠)。然而,一些阅读器输出 8 字节的 UID,并包括 7 字节 UID 的级联标签。因此,对于这些读者,所有 7 字节的 UID 都以 0x88 开头。您的读者似乎并非如此。

    是否有可能的策略来区分这两种情况?

    我想到了一些策略来区分 4 字节 UID 和 7 字节 UID。

  • 7 字节 UID 的第一个字节是制造商代码(如 ISO/IEC 7816-6 中定义(参见 How to detect manufacturer from NFC tag using Android? 了解如何获取列表)。因此,如果您的制造商数量有限(例如,如果您仅使用带有 NXP 芯片的 MIFARE 卡),您可以将所有以 NXP 制造商代码 (0x04) 开头的 UID 解释为 7 字节 UID。不过,您应该注意,允许以 0x04 开头的 4 字节 UID 为嗯。因此,这种方法不是 100% 可靠的,并且在某些情况下可能会失败。
  • 4 字节 UID 的第一个字节不得包含以下任何值:'x8'(x != '0')、'xF'。如果您找到匹配任何这些值的第一个字节,则可以假设 UID 由 7 个字节组成。
  • 关于uniqueidentifier - Mifare 卡 : distinguish between 4-byte and 7-byte UIDs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37837730/

    相关文章:

    python - 将 RFID 标签与 Python Flask 中的 MFRC522 模块链接,以使用 Raspberry pi3 访问学生数据库

    android - 在 USB-NFC-Reader 上访问卡模拟模式

    Android NFC卡仿真可行性

    php - 如何在 PHP 中获取长 19 位随机数?

    唯一的、数字的、递增的标识符

    RFID-RC522 无法读取不同的卡,接受随附的卡

    php - 我想在我的数据库中每天标记一次学生的出勤情况

    javascript - 为不同线程的 Disqus 评论创建动态弹出窗口

    postgresql - PL/pgSQL 列名与变量相同

    ios - 在 iOS 13 上读取 Mifare Ultralight NFC 标签时出现 "Tag connection lost"错误