Java透過USB讀卡機取得健保卡資訊

今天是個有趣的日子,有位朋友希望能利用 USB 讀卡機取得健保卡的資訊。

詢問過相關的廠商協助,廠商似乎不太願意替我們完成。

我不禁好奇想試試看,這個到底是有多麼的困難?!

於是上網查了一下資料,參考了以下的文章:

http://blog.blueshop.com.tw/timothychi/articles/54593.aspx

然後試著自己完成了一個簡單的讀出 健保卡資訊的 小程式,就當是送給大家吧!!XD

public static byte[] SelectAPDU = new byte[]{ (byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00, (byte)0x10, (byte)0xD1, (byte)0x58, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x11, (byte)0x00 };
public static byte[] ReadProfileAPDU = new byte[] { (byte)0x00, (byte)0xca, (byte)0x11, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00 };

public static void main(String[] args) {

TerminalFactory terminalFactory = TerminalFactory.getDefault();

try{
for (CardTerminal terminal : terminalFactory.terminals().list() ){
try{
Card card = terminal.connect(“*");
CardChannel channel = card.getBasicChannel();

CommandAPDU command = new CommandAPDU(SelectAPDU);
ResponseAPDU response = channel.transmit(command);

command = new CommandAPDU(ReadProfileAPDU);
response = channel.transmit(command);

System.out.println(new String(Arrays.copyOfRange( response.getData(), 0, 12 )) );                    // 卡號
System.out.println(new String(Arrays.copyOfRange( response.getData(), 12, 32 ), “Big5″).trim() );    // 姓名
System.out.println(new String(Arrays.copyOfRange( response.getData(), 32, 42 )) );                   // 身分證號
System.out.println(new String(Arrays.copyOfRange( response.getData(), 42, 49 )) );                // 出生年月日
System.out.println(new String(Arrays.copyOfRange( response.getData(), 49, 50 )) );                    // 性別

System.out.println(new String(Arrays.copyOfRange( response.getData(), 50, 57 )) );                 // 發卡年月日

} catch (javax.smartcardio.CardNotPresentException e) {
// e.printStackTrace();
continue;
} catch (CardException e) {
// e.printStackTrace();
continue;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (CardException e) {
e.printStackTrace();
}

}

你沒看錯!!…的確是不到50行的一個小程式!!…XD

廣告

About fenjj

Perfect !!??...
藝廊 | 本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s