オーストリアの電子カードから姓と名字を取得しようとしています。オーストリアのeカードからResponseAPDUをXMLにデコードする方法は?
現在の動作は次のとおりです。カードにアクセスし、APDUコマンドを送信し、情報をバイト配列として取得します。
受信したバイト配列をXMLに変換して、必要なデータを抽出するにはどうすればよいですか?ここで
は、コードは次のとおりです。
import java.util.List;
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 Main2 {
public static void main(String[] args) {
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals;
try {
terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("*");
CardChannel channel = card.getBasicChannel();
// Select the MF
byte[] aid = { (byte) 0xD0, 0x40, 0x00, 0x00, 0x17, 0x01, 0x01, 0x01 };
ResponseAPDU resp = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid));
System.out.println("Response: " + resp.toString());
// Select the Personaladata-file
byte[] aid2 = { (byte) 0xEF, 0x01 };
resp = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x02, 0x04, aid2));
System.out.println("Response: " + resp.toString());
// Get the data from the file
resp = channel.transmit(new CommandAPDU(0x00, 0xB0, 0x00, 0x00, 0xFF));
System.out.println("Response: " + resp.toString());
System.out.println("Response String: " + new String(resp.getData()));
card.disconnect(false);
} catch (CardException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
へDERのバイト配列を解読するためのコードです(2) 'は、あなたに与えられた名前などを常に与えるとは限りません。これは、たとえば、プレフィックス付きの学術タイトルまたは追加の学位のフィールドが追加されている場合です。私はちょうど私の前のカードでチェックし、タイトルやサフィックスがない場合、それらのフィールドは単に欠席しています。 –