1
我試圖通過Java讀取印度政府標準「Scosta」智能卡smartcardio 我使用的代碼是Java智能卡 - 讀Scosta智能卡
package com.example.smartcardreader;
import java.util.List;
import javax.smartcardio.ATR;
import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;
public class SmartCardReader {
public static void main(String[] args) {
try{
// show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// get the first terminal
CardTerminal terminal = terminals.get(0);
// establish a connection with the card
Card card = terminal.connect("*");
System.out.println("card: " + card);
// get the ATR
ATR atr = card.getATR();
byte[] baAtr = atr.getBytes();
System.out.print("ATR = 0x");
for(int i = 0; i < baAtr.length; i++){
System.out.printf("%02X ",baAtr[i]);
}
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();
System.out.print("Card UID = 0x");
for(int i = 0; i < baCardUid.length; i++){
System.out.printf("%02X ", baCardUid [i]);
}
}
card.disconnect(false);
} catch (CardException e) {
e.printStackTrace();
}
}
}
我使用eclipse IDE在Mac機上進行開發。當我運行這個代碼時,它給了我例外,因爲它不能讀取終端。我有一個USB讀卡器,並且還插入了智能卡。 你能指出我究竟在哪裏出錯嗎? 在此先感謝。
如果能夠與讀者一起工作,您是否嘗試過其他任何應用程序?也許你只需要安裝驅動程序。 – jariq
我在Netbeans及其工作的Windows機器上嘗試了相同的代碼。所以問題在於我的環境。 USB驅動程序已正確安裝,並且它也顯示在連接的設備列表中。我現在應該怎麼做 ? –
你使用的是什麼版本的OS X和Java? – jariq