PureBasic
PureBasic
PC/SC Get Card UID
See more SCard Examples
Sends the APDU command to get a card's UID.Chilkat PureBasic Downloads
IncludeFile "CkSCard.pb"
IncludeFile "CkBinData.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
scard.i = CkSCard::ckCreate()
If scard.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; First establish a context to the PC/SC Resource Manager
success = CkSCard::ckEstablishContext(scard,"user")
If success = 0
Debug CkSCard::ckLastErrorText(scard)
CkSCard::ckDispose(scard)
ProcedureReturn
EndIf
; Use your own smart card reader name here.
success = CkSCard::ckConnect(scard,"ACS ACR122 0","shared","no_preference")
If success = 0
Debug CkSCard::ckLastErrorText(scard)
CkSCard::ckDispose(scard)
ProcedureReturn
EndIf
Debug "Connected reader: " + CkSCard::ckConnectedReader(scard)
Debug "Active protocol: " + CkSCard::ckActiveProtocol(scard)
Debug "ATR: " + CkSCard::ckCardAtr(scard)
Debug "Reader Status: " + CkSCard::ckReaderStatus(scard)
; Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
bdRecv.i = CkBinData::ckCreate()
If bdRecv.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkSCard::ckTransmitHex(scard,CkSCard::ckActiveProtocol(scard),"FFCA000000",bdRecv,32)
If success = 1
Debug "Received: " + CkBinData::ckGetEncoded(bdRecv,"hex")
; The UID is the returned data without the final 2 bytes.
numBytes.i = CkBinData::ckNumBytes(bdRecv)
If numBytes > 2
Debug "UID: " + CkBinData::ckGetEncodedChunk(bdRecv,0,numBytes - 2,"hex")
EndIf
Else
Debug CkSCard::ckLastErrorText(scard)
EndIf
; Disconnect from this reader.
success = CkSCard::ckDisconnect(scard,"leave")
If success = 0
Debug CkSCard::ckLastErrorText(scard)
EndIf
; Applications should always release the context when finished.
success = CkSCard::ckReleaseContext(scard)
If success = 0
Debug CkSCard::ckLastErrorText(scard)
EndIf
CkSCard::ckDispose(scard)
CkBinData::ckDispose(bdRecv)
ProcedureReturn
EndProcedure