Swift
Swift
PC/SC Get Card UID
See more SCard Examples
Sends the APDU command to get a card's UID.Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
let scard = CkoSCard()!
// First establish a context to the PC/SC Resource Manager
success = scard.establishContext(scope: "user")
if success == false {
print("\(scard.lastErrorText!)")
return
}
// Use your own smart card reader name here.
success = scard.connect(reader: "ACS ACR122 0", shareMode: "shared", preferredProtocol: "no_preference")
if success == false {
print("\(scard.lastErrorText!)")
return
}
print("Connected reader: \(scard.connectedReader!)")
print("Active protocol: \(scard.activeProtocol!)")
print("ATR: \(scard.cardAtr!)")
print("Reader Status: \(scard.readerStatus!)")
// Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
let bdRecv = CkoBinData()!
success = scard.transmitHex(protocol: scard.activeProtocol, apduHex: "FFCA000000", bdRecv: bdRecv, maxRecvLen: 32)
if success == true {
print("Received: \(bdRecv.getEncoded(encoding: "hex")!)")
// The UID is the returned data without the final 2 bytes.
var numBytes: Int = bdRecv.numBytes.intValue
if numBytes > 2 {
print("UID: \(bdRecv.getEncodedChunk(offset: 0, numBytes: numBytes - 2, encoding: "hex")!)")
}
}
else {
print("\(scard.lastErrorText!)")
}
// Disconnect from this reader.
success = scard.disconnect(disposition: "leave")
if success == false {
print("\(scard.lastErrorText!)")
}
// Applications should always release the context when finished.
success = scard.releaseContext()
if success == false {
print("\(scard.lastErrorText!)")
}
}