Sample code for 30+ languages & platforms
PHP Extension

PC/SC Get Card UID

See more SCard Examples

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

Chilkat PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

$success = false;

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

$scard = new CkSCard();

// First establish a context to the PC/SC Resource Manager
$success = $scard->EstablishContext('user');
if ($success == false) {
    print $scard->lastErrorText() . "\n";
    exit;
}

// Use your own smart card reader name here.
$success = $scard->Connect('ACS ACR122 0','shared','no_preference');
if ($success == false) {
    print $scard->lastErrorText() . "\n";
    exit;
}

print 'Connected reader: ' . $scard->connectedReader() . "\n";
print 'Active protocol: ' . $scard->activeProtocol() . "\n";
print 'ATR: ' . $scard->cardAtr() . "\n";
print 'Reader Status: ' . $scard->readerStatus() . "\n";

//  Send the APDU command 0xFF, 0xCA, 0x00, 0x00, 0x00
$bdRecv = new CkBinData();
$success = $scard->TransmitHex($scard->activeProtocol(),'FFCA000000',$bdRecv,32);
if ($success == true) {

    print 'Received: ' . $bdRecv->getEncoded('hex') . "\n";

    // The UID is the returned data without the final 2 bytes.
    $numBytes = $bdRecv->get_NumBytes();
    if ($numBytes > 2) {
        print 'UID: ' . $bdRecv->getEncodedChunk(0,$numBytes - 2,'hex') . "\n";
    }

}
else {
    print $scard->lastErrorText() . "\n";
}

// Disconnect from this reader.
$success = $scard->Disconnect('leave');
if ($success == false) {
    print $scard->lastErrorText() . "\n";
}

// Applications should always release the context when finished.
$success = $scard->ReleaseContext();
if ($success == false) {
    print $scard->lastErrorText() . "\n";
}


?>