1

我正在尝试构建一个 iOS 应用程序来读取货币/交通卡(例如信用卡)信息。我的应用程序已经检测到它。但是,我仍然无法获取我检索到的字节内的数据。

这是我的 APDU 命令代码:

if case let .iso7816(tag) = nfcTag {
                let apdu = NFCISO7816APDU(instructionClass: 13, instructionCode: 0xB2, p1Parameter: 0, p2Parameter: 0, data: ReaderType.cardInfo.rawValue.hexStringToData(), expectedResponseLength: 32)
                self.tagSession?.alertMessage = "Select Command Success!"
                
                tag.sendCommand(apdu: apdu) { (data:Data, sw1:UInt8, sw2:UInt8, error:Error?) in
                    guard error == nil else {
                        print("Error send command: \(error!)")
                        session.invalidate(errorMessage: "Error send command: \(error!)")
                        return
                    }
                    self.processingData(data: data, sTag: tag, session: session)
             }
           }
         }       
}

这是我的数据处理代码:

func processingData(data: Data, sTag: NFCISO7816Tag, session: NFCReaderSession) {
        print(String(data:data,encoding: .utf8) ?? "")
        let tagUIDData = sTag.identifier
        var byteData: [UInt8] = []
        tagUIDData.withUnsafeBytes { byteData.append(contentsOf: $0) }
        var uidString = ""
        for byte in byteData {
            let decimalNumber = String(byte, radix: 16)
            if (Int(decimalNumber) ?? 0) < 10 {
                uidString.append("0\(decimalNumber)")
            } else {
                uidString.append(decimalNumber)
            }
        }
        print("\n\(byteData) converted to Tag UID: \(uidString)")
        let value: String = getBalanceTagConverter(byteData.hexa)
        print("\ncardUID : \(value)")
        self.tagSession?.alertMessage = "Your UID is \(byteData.hexa)"
        self.tagSession?.invalidate()
    }
4

0 回答 0