Objective-C
Objective-C
PC/SC Get Card UID
See more SCard Examples
Sends the APDU command to get a card's UID.Chilkat Objective-C Downloads
#import <CkoSCard.h>
#import <CkoBinData.h>
BOOL success = NO;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkoSCard *scard = [[CkoSCard alloc] init];
// First establish a context to the PC/SC Resource Manager
success = [scard EstablishContext: @"user"];
if (success == NO) {
NSLog(@"%@",scard.LastErrorText);
return;
}
// Use your own smart card reader name here.
success = [scard Connect: @"ACS ACR122 0" shareMode: @"shared" preferredProtocol: @"no_preference"];
if (success == NO) {
NSLog(@"%@",scard.LastErrorText);
return;
}
NSLog(@"%@%@",@"Connected reader: ",scard.ConnectedReader);
NSLog(@"%@%@",@"Active protocol: ",scard.ActiveProtocol);
NSLog(@"%@%@",@"ATR: ",scard.CardAtr);
NSLog(@"%@%@",@"Reader Status: ",scard.ReaderStatus);
// Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
CkoBinData *bdRecv = [[CkoBinData alloc] init];
success = [scard TransmitHex: scard.ActiveProtocol apduHex: @"FFCA000000" bdRecv: bdRecv maxRecvLen: [NSNumber numberWithInt: 32]];
if (success == YES) {
NSLog(@"%@%@",@"Received: ",[bdRecv GetEncoded: @"hex"]);
// The UID is the returned data without the final 2 bytes.
int numBytes = [bdRecv.NumBytes intValue];
if (numBytes > 2) {
NSLog(@"%@%@",@"UID: ",[bdRecv GetEncodedChunk: [NSNumber numberWithInt: 0] numBytes: [NSNumber numberWithInt: (numBytes - 2)] encoding: @"hex"]);
}
}
else {
NSLog(@"%@",scard.LastErrorText);
}
// Disconnect from this reader.
success = [scard Disconnect: @"leave"];
if (success == NO) {
NSLog(@"%@",scard.LastErrorText);
}
// Applications should always release the context when finished.
success = [scard ReleaseContext];
if (success == NO) {
NSLog(@"%@",scard.LastErrorText);
}