Sample code for 30+ languages & platforms
PHP ActiveX

PC/SC Get Card UID

See more SCard Examples

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

Chilkat PHP ActiveX Downloads

PHP ActiveX
<?php

$success = 0;

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

$scard = new COM("Chilkat.SCard");

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

// Use your own smart card reader name here.
$success = $scard->Connect('ACS ACR122 0','shared','no_preference');
if ($success == 0) {
    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 COM("Chilkat.BinData");
$success = $scard->TransmitHex($scard->ActiveProtocol,'FFCA000000',$bdRecv,32);
if ($success == 1) {

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

    // The UID is the returned data without the final 2 bytes.
    $numBytes = $bdRecv->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 == 0) {
    print $scard->LastErrorText . "\n";
}

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


?>