【问题标题】:How do I know NFC Passport Chips read which DataGroup?我如何知道 NFC 护照芯片读取了哪个数据组?
【发布时间】:2020-01-23 10:39:21
【问题描述】:

我正在阅读德国电子护照,它也在阅读数据组 1、2、3 和 14 以及 SOD、COM。现在,我想阅读包含其他详细信息的 Datagroup 11。但是德国护照不读取可选数据。那么,我怎么知道哪些护照读取了哪些组? 我已经浏览了ICAO 9303,但没有任何机会获得此信息。

【问题讨论】:

  • 试试看github.com/AndyQ/NFCPassportReader,希望对你有帮助
  • 是的,我正在使用这个库,但我的问题更多的是:是否可以读取其他数据组?如果是那么如何,如果不是那么为什么?正如我在德国护照中所说,我只能读取 DG1、DG2、DG3、DG14 和 SOD 哈希键。那么为什么我无法阅读其他组。

标签: ios iphone nfc core-nfc


【解决方案1】:

在我的应用程序中,我读取了 DG32、DG33、DG34,但流程是相同的,这里是一些如何使用 NFCPassportReader 实现 DG11 文件读取的示例

public class DataGroup {

    public var elements: [String: String] = [:]   

// 我添加了这个字典以从文档中按键获取值

class DG11: DataGroup {

        private let tags = [0x5F0E, 0x5F0F, 0x5F10, 0x5F11, 0x5F2B]

        required init(_ data: [UInt8]) throws {
            try super.init(data)
            datagroupType = .DG11
        }

        override func parse(_ data: [UInt8]) throws {
            var tag = try getNextTag()
            if tag != 0x5C { throw TagError.InvalidResponse }
            _ = try getNextValue()
            try tags.forEach { _ in
                tag = try getNextTag()
                parseBody(try getNextValue(), key: String(tag, radix: 16, uppercase: true))
            }
            print(elements)
        }

        private func parseBody(_ data: [UInt8], key: String) {
            elements[key] = String(bytes: data[0...], encoding: .utf8)
        }

    }

希望对你有帮助

【讨论】:

  • 你真的读过 DG32、DG33 和 34,因为 ICAO 说护照只有 16 个数据组。所以,我现在被困住了。感谢上面的代码,我会检查它。
  • 乌克兰护照有上面提到的组,我都看过了。您应该阅读电子护照内容的官方文档,它是开源的
  • 但是我没有读到任何关于 DG32,33,34....的信息?你有一些相同的文件吗?你能告诉我乌克兰护照上的哪个 DG 吗?
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多