Tcl
Tcl
PC/SC Get Card UID
See more SCard Examples
Sends the APDU command to get a card's UID.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set scard [new_CkSCard]
# First establish a context to the PC/SC Resource Manager
set success [CkSCard_EstablishContext $scard "user"]
if {$success == 0} then {
puts [CkSCard_lastErrorText $scard]
delete_CkSCard $scard
exit
}
# Use your own smart card reader name here.
set success [CkSCard_Connect $scard "ACS ACR122 0" "shared" "no_preference"]
if {$success == 0} then {
puts [CkSCard_lastErrorText $scard]
delete_CkSCard $scard
exit
}
puts "Connected reader: [CkSCard_connectedReader $scard]"
puts "Active protocol: [CkSCard_activeProtocol $scard]"
puts "ATR: [CkSCard_cardAtr $scard]"
puts "Reader Status: [CkSCard_readerStatus $scard]"
# Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
set bdRecv [new_CkBinData]
set success [CkSCard_TransmitHex $scard [CkSCard_activeProtocol $scard] "FFCA000000" $bdRecv 32]
if {$success == 1} then {
puts "Received: [CkBinData_getEncoded $bdRecv hex]"
# The UID is the returned data without the final 2 bytes.
set numBytes [CkBinData_get_NumBytes $bdRecv]
if {$numBytes > 2} then {
puts "UID: [CkBinData_getEncodedChunk $bdRecv 0 [expr $numBytes - 2] hex]"
}
} else {
puts [CkSCard_lastErrorText $scard]
}
# Disconnect from this reader.
set success [CkSCard_Disconnect $scard "leave"]
if {$success == 0} then {
puts [CkSCard_lastErrorText $scard]
}
# Applications should always release the context when finished.
set success [CkSCard_ReleaseContext $scard]
if {$success == 0} then {
puts [CkSCard_lastErrorText $scard]
}
delete_CkSCard $scard
delete_CkBinData $bdRecv