Saturday 28 August 2021

Read Smart Card Serial Number UID

import java.util.List;
import javax.smartcardio.*;

public class ReadCard {

public static void main(String[] args){
try {
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
for (CardTerminal terminal : terminals){
System.out.println(terminal.getName());
if (terminal.isCardPresent()){
Card card = terminal.connect("*");
System.out.println("\t"+card);
ATR atr = card.getATR();
byte[] baAtr = atr.getBytes();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < baAtr.length; i++ ){
sb.append(String.format("%02X:", baAtr[i]));
}
sb.setLength(Math.max(sb.length() - 1, 0));
System.out.println("\tATR = " + sb);
CardChannel channel = card.getBasicChannel();
byte[] cmdApduGetCardUid = new byte[] { (byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00 };
ResponseAPDU respApdu = channel.transmit(new CommandAPDU(cmdApduGetCardUid));
if(respApdu.getSW1() == 0x90 && respApdu.getSW2() == 0x00){
byte[] baCardUid = respApdu.getData();
sb = new StringBuilder();
for(int i = 0; i < baCardUid.length; i++ ){
sb.append(String.format("%02X:", baCardUid[i]));
}
sb.setLength(Math.max(sb.length() - 1, 0));
System.out.println("\tCard UID = " + sb);
}
card.disconnect(false);
} else {
System.out.println("\tNo Card Present..");
}
}
} catch (CardException e) {
e.printStackTrace();
}
}
}