Sample code for 30+ languages & platforms
Go

PC/SC Get Card UID

See more SCard Examples

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

Chilkat Go Downloads

Go
    success := false

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    scard := chilkat.NewSCard()

    // First establish a context to the PC/SC Resource Manager
    success = scard.EstablishContext("user")
    if success == false {
        fmt.Println(scard.LastErrorText())
        scard.DisposeSCard()
        return
    }

    // Use your own smart card reader name here.
    success = scard.Connect("ACS ACR122 0","shared","no_preference")
    if success == false {
        fmt.Println(scard.LastErrorText())
        scard.DisposeSCard()
        return
    }

    fmt.Println("Connected reader: ", scard.ConnectedReader())
    fmt.Println("Active protocol: ", scard.ActiveProtocol())
    fmt.Println("ATR: ", scard.CardAtr())
    fmt.Println("Reader Status: ", scard.ReaderStatus())

    //  Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
    bdRecv := chilkat.NewBinData()
    success = scard.TransmitHex(scard.ActiveProtocol(),"FFCA000000",bdRecv,32)
    if success == true {

        fmt.Println("Received: ", *bdRecv.GetEncoded("hex"))

        // The UID is the returned data without the final 2 bytes.
        numBytes := bdRecv.NumBytes()
        if numBytes > 2 {
            fmt.Println("UID: ", *bdRecv.GetEncodedChunk(0,numBytes - 2,"hex"))
        }

    } else {
        fmt.Println(scard.LastErrorText())
    }

    // Disconnect from this reader.
    success = scard.Disconnect("leave")
    if success == false {
        fmt.Println(scard.LastErrorText())
    }

    // Applications should always release the context when finished.
    success = scard.ReleaseContext()
    if success == false {
        fmt.Println(scard.LastErrorText())
    }


    scard.DisposeSCard()
    bdRecv.DisposeBinData()