ตอนนี้ผมกำลังเขียนการอ่านข้อมูลในส่วนของ public ด้วยภาษา Java อยู่ ใครพอจะมี source code ที่พอที่จะสามารถแบ่งปันได้รบกวนหน่อยครับ
ตัวอย่าง source code java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.util.List;
import javax.smartcardio.*;
/**
*
* @author admin
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
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("X ",baAtr
);
}
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.println("Card UID = 0x");
for(int i = 0; i < baCardUid.length; i++ ){
System.out.printf("X ", baCardUid );
}
}
card.disconnect(false);
} catch (CardException e) {
e.printStackTrace();
}
}
}
=============================================================================
ในบรรทัด
if(respApdu.getSW1() == 0x90 && respApdu.getSW2() == 0x00)
คำถาม
1. ลอง print ออกมาดูแล้ว SW1 ไม่เท่ากับ 0x90 เลยไม่เข้าเงื่อนไขทำให้ไม่สามารถเข้าไปทำในเงื่อนไขภายในได้
2. มี link หรือตัวอย่างการดึงข้อมูล public ในบัตรประชาชนที่ไหนบ้างครับ ที่พอจะสามารถนำมาใช้งานได้
ขอบคุณครับ
การดึงข้อมูลจากบัตรประชาชนด้วยภาษา java
ตัวอย่าง source code java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.util.List;
import javax.smartcardio.*;
/**
*
* @author admin
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
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("X ",baAtr);
}
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.println("Card UID = 0x");
for(int i = 0; i < baCardUid.length; i++ ){
System.out.printf("X ", baCardUid );
}
}
card.disconnect(false);
} catch (CardException e) {
e.printStackTrace();
}
}
}
=============================================================================
ในบรรทัด
if(respApdu.getSW1() == 0x90 && respApdu.getSW2() == 0x00)
คำถาม
1. ลอง print ออกมาดูแล้ว SW1 ไม่เท่ากับ 0x90 เลยไม่เข้าเงื่อนไขทำให้ไม่สามารถเข้าไปทำในเงื่อนไขภายในได้
2. มี link หรือตัวอย่างการดึงข้อมูล public ในบัตรประชาชนที่ไหนบ้างครับ ที่พอจะสามารถนำมาใช้งานได้
ขอบคุณครับ