Sample code for 30+ languages & platforms
Swift

PC/SC Get Card UID

See more SCard Examples

Sends the APDU command to get a card's UID.

Chilkat Swift Downloads

Swift

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!)")
    }


}