ซึ่งตัวไลบารี่จะมีชนิดข้อมูลที่ให้บริการ 2 ประเภท คือ
1. ข้อมูลพื้นฐานจากบัตรประจำตัวประชาชน
2. ข้อมูลเกี่ยวกับสิทธิ์การรักษา
***ข้อมูลสิทธิ์การรักษาจะเป็นข้อมูลที่ได้โดยตรงจากชิปการ์ดของบัตรประจำตัวประชาชน ซึ่งไม่ใช่ข้อมูลอัพเดตล่าสุด***
1.การเชื่อมต่อกับเครื่องอ่านสมาร์ทการ์ด
เริ่มจากเรียกไลบารี่ ดังนี้
public ThSCM(){
callCard();
}
private void callCard(){
try{
pcscServices pcsc = new pcscServices(); // Object ที่ใช้ในการ Gen ข้อมูลจากบัตร
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list(); // ตรวจสอบว่ามีเครื่องอ่านบัตรที่เสียบอยู่กับคอมพิวเตอร์กี่เครื่อง
CardTerminal terminal = terminals.get(0); // เรียกเครื่องอ่านสมาร์ทการ์ดที่มีสถานะ Active อยู่
Card card = terminal.connect("*"); // เป็นเชื่อต่อกับเครื่องอ่านสมาร์ทการ์ดโดยจะไปหาเครื่องที่ Active อยู่ที่อยู่ในตำแหน่งที่ 0
pcsc.getAvialableDataInfo(card, true); // เป็นการเรียกเมทธอดจาก Class pcscService หากต้องการรูปให้ใส่ true ลงในเมทธอด
card.disconnect(true); // เมื่อเครื่องอ่านสมาร์ทการ์ดอ่านเสร็จก็จะทำการ Disconnect
}catch(CardException ex){
System.out.println(ex.getMessage());
}catch(IOException ex){
System.out.println(ex.getMessage());
}
}
2.การเรียกใช้งานข้อมูลที่มีให้บริการ
public static void main(String[] args){
MoiApplet1Info moi = new MoiApplet1Info();
NhsoAppletInfo nhso = new NhsoAppletInfo();
ThSCM thscm = new ThSCM();
// ส่วนของข้อมูลพื้นฐาน
System.out.println(moi.getPid()); //แสดงเลขบัตรประจำตัวประชาชน
System.out.println(moi.getThaiName()); //แสดงชื่อในรุปแบบภาษาไทย
System.out.println(moi.getEngName()); // แสดงชื่แในรูปแบบภาษาอังกฤษ
System.out.println(moi.getThaiName().getTitle()); //แสดงคำนำหน้าชื่อ
System.out.println(moi.getThaiName().getFirstName()); //แสดงชื่อ
System.out.println(moi.getThaiName().getLastName()); // แสดงนามสกุล
System.out.println(moi.getAddress()); // แสดงที่อยู่ตามบัตรสมาร์ทการ์ด
System.out.println(moi.getSexDesc()); // แสดงเพศ
System.out.println(moi.getFormattedBod()); //แสดงวันเกิด ในรูปแบบ วัน เดือน ปีที่เกิด
System.out.println(moi.getFormattedDateOfIssue()); // แสดงวันที่ทำบัตร
System.out.println(moi.getFormattedDateOfExpiry()); // แสดงวันที่บัตรหมดอายุ
// แสดงค่าออกมาในรูปแบบไบต์อาร์เรย์ ซึ่งผู้ใช้จะต้องนำไปแปลงเป็น Bytebuffer ต่อไปหากพัฒนากับ JAVA
System.out.println(moi.getFacesImage());
// ส่วนของสิทธิ์การรักษา
System.out.println(nhso.getChangeHospitalAmount());
System.out.println(nhso.getDateOfExpiry()); // วันหมดอายุของการขอใช้สิทธ์ ข้อมูลจะอยู่ในรูปแบบ ปี เดือน วัน
System.out.println(nhso.getDateOfIssue()); // วันที่เริ่มใช้สิทธ์ ข้อมูลจะอยู่ในรูปแบบ ปี เดือน วันของการขอใช้บริการ
System.out.println(nhso.getUpdateDate()); // ข้อมูล ปี เดือน วันที่ถูกอัพเดต
System.out.println(nhso.getFormattedDateOfExpirey()); // วันหมดอายุของการขอใช้สิทธ์ ข้อมูลจะอยู่ในรูปแบบ วัน เดือน ปีของวันหมดอายุ
System.out.println(nhso.getFormattedDateOfIssue()); // วันที่เริ่มใช้สิทธ์ ข้อมูลจะอยู่ในรูปแบบ วัน เดือน ปีของการขอใช้บริการ
System.out.println(nhso.getFormattedUpdateDate()); // ข้อมูล วัน เดือน ปีที่ถูกอัพเดต
System.out.println(nhso.getMainHospitalsName()); // ข้อมูลชื่อหน่วยบริการที่รับการส่งต่อ
System.out.println(nhso.getMainRights()); // ข้อมูลของสิทธ์
System.out.println(nhso.getPaidType());
System.out.println(nhso.getSubHospitalsName()); // ข้อมูลชื่อหน่วยบริการปฐมภูมิ
System.out.println(nhso.getSubRights()); // ข้อมูลช่วงอายุของผู้รับบริการ
}
เป็นหน่วยการติดต่อแบบพิเศษ เรียกว่า aplliacation protocol data units ใช้เพื่อแลกเปลี่ยนข้อมูลกับ Type 4 Tag platform
: คำสั่งที่ถูกส่งมาจากอุปกรณ์อ่านการ์ด
: คำตอบที่ถูกส่งมาจากเครื่องอ่านการ์ด
Field | Description |
Select | เลือกแอพพลิเคชั่นหรือไฟล์ |
ReadBinary | อ่านข้อมูลจากไฟล์ |
UpdateBinary | เขียนข้อมูลลงในไฟล์ |
Field | Length | Required | Description |
CLA | 1 byte | yes | เป็นตัวกำหนดความปลอดภัยของข้อความ |
INS | 1 byte | yes | ตัวกำหนดชนิดคำสั่งในการประมวลผล ดูจาก APDU type |
P1 | 1 byte | yes | เป็นตัวกำหนด parameter แรกสำหรับชนิดคำสั่งที่ถูกเลือก |
Lc | 1 or 3 byte | no | ตัวกำหนดความยาวของข้อมูล |
Data | Lc byte | no | เรียก Lc เพื่อโหลดข้อมูลของ C-ADPU |
Le | 1 or 2 byte | no | ระบุความยาวของ Response ที่จะออกมาจาก R-ADPU |
Field | Length | Required | Description |
Response Body | variable | no | เป็นการเอาข้อมูลของ R-ADPU |
SW1 | 1 byte | yes | ระบุสถานะแรกของคำ |
SW2 | 1 byte | yes | ระบุสถานะที่สองของคำ |
Description | CLA | INS | P1 | P2 | Lc | Data | Le |
Select | 0x00 | 0xA4 | 0x04 | 0x00 | 0x08 | 0xA0,0x00,0x00,0x00,0x54,0x48,0x00,0x01 | |
GET RESPONSE | 0x00 | 0xC0 | 0x00 | 0x00 | |||
Description | CLA | INS | P1 | P2 | Lc | Data | Le |
pid | 0x80 | 0xB0 | 0x00 | 0x04 | 0x02 | 0x00 | 0x0D |
thaiName | 0x80 | 0xB0 | 0x00 | 0x11 | 0x02 | 0x00 | 0x64 |
bod | 0x80 | 0xB0 | 0x00 | 0xD9 | 0x02 | 0x00 | 0x08 |
address | 0x80 | 0xB0 | 0x15 | 0x79 | 0x02 | 0x00 | 0xA0 |
dateOfIssue | 0x80 | 0xB0 | 0x01 | 0x67 | 0x02 | 0x00 | 0x08 |
dateOfExpiry | 0x80 | 0xB0 | 0x01 | 0x6F | 0x02 | 0x00 | 0x08 |
sex | 0x80 | 0xB0 | 0x00 | 0xE1 | 0x02 | 0x00 | 0x01 |
facesImage 1/26 | 0x80 | 0xB0 | 0x01 | 0x79 | 0x02 | 0x00 | 0xC8 |
facesImage 2/26 | 0x80 | 0xB0 | 0x02 | 0x41 | 0x02 | 0x00 | 0xC8 |
facesImage 3/26 | 0x80 | 0xB0 | 0x03 | 0x09 | 0x02 | 0x00 | 0xC8 |
facesImage 4/26 | 0x80 | 0xB0 | 0x03 | 0xD1 | 0x02 | 0x00 | 0xC8 |
facesImage 5/26 | 0x80 | 0xB0 | 0x04 | 0x99 | 0x02 | 0x00 | 0xC8 |
facesImage 6/26 | 0x80 | 0xB0 | 0x05 | 0x61 | 0x02 | 0x00 | 0xC8 |
facesImage 7/26 | 0x80 | 0xB0 | 0x06 | 0x29 | 0x02 | 0x00 | 0xC8 |
facesImage 8/26 | 0x80 | 0xB0 | 0x06 | 0xF1 | 0x02 | 0x00 | 0xC8 |
facesImage 9/26 | 0x80 | 0xB0 | 0x07 | 0xB9 | 0x02 | 0x00 | 0xC8 |
facesImage 10/26 | 0x80 | 0xB0 | 0x08 | 0x81 | 0x02 | 0x00 | 0xC8 |
facesImage 11/26 | 0x80 | 0xB0 | 0x09 | 0x49 | 0x02 | 0x00 | 0xC8 |
facesImage 12/26 | 0x80 | 0xB0 | 0x0A | 0x11 | 0x02 | 0x00 | 0xC8 |
facesImage 13/26 | 0x80 | 0xB0 | 0x0A | 0xD9 | 0x02 | 0x00 | 0xC8 |
facesImage 14/26 | 0x80 | 0xB0 | 0x0B | 0xA1 | 0x02 | 0x00 | 0xC8 |
facesImage 15/26 | 0x80 | 0xB0 | 0x0C | 0x69 | 0x02 | 0x00 | 0xC8 |
facesImage 16/26 | 0x80 | 0xB0 | 0x0D | 0x31 | 0x02 | 0x00 | 0xC8 |
facesImage 17/26 | 0x80 | 0xB0 | 0x0D | 0xF9 | 0x02 | 0x00 | 0xC8 |
facesImage 18/26 | 0x80 | 0xB0 | 0x0E | 0xC1 | 0x02 | 0x00 | 0xC8 |
facesImage 19/26 | 0x80 | 0xB0 | 0x0F | 0x89 | 0x02 | 0x00 | 0xC8 |
facesImage 20/26 | 0x80 | 0xB0 | 0x10 | 0x51 | 0x02 | 0x00 | 0xC8 |
facesImage 21/26 | 0x80 | 0xB0 | 0x11 | 0x19 | 0x02 | 0x00 | 0xC8 |
facesImage 22/26 | 0x80 | 0xB0 | 0x11 | 0xE1 | 0x02 | 0x00 | 0xC8 |
facesImage 23/26 | 0x80 | 0xB0 | 0x12 | 0xA9 | 0x02 | 0x00 | 0xC8 |
facesImage 24/26 | 0x80 | 0xB0 | 0x13 | 0x71 | 0x02 | 0x00 | 0xC8 |
facesImage 25/26 | 0x80 | 0xB0 | 0x14 | 0x39 | 0x02 | 0x00 | 0xC8 |
facesImage 26/26 | 0x80 | 0xB0 | 0x15 | 0x01 | 0x02 | 0x00 | 0x78 |
Description | CLA | INS | P1 | P2 | Lc | Data | Le |
Select | 0x00 | 0xA4 | 0x04 | 0x00 | 0x08 | 0xA0,0x00,0x00,0x00,0x54,0x48,0x00,0x83 | |
GET RESPONSE | 0x00 | 0xC0 | 0x00 | 0x00 | |||
mainRights | 0x80 | 0xB0 | 0x00 | 0x04 | 0x02 | 0x00 | 0x3C |
subRights | 0x80 | 0xB0 | 0x00 | 0x40 | 0x02 | 0x00 | 0x64 |
mainHospitalsName | 0x80 | 0xB0 | 0x00 | 0xA4 | 0x02 | 0x00 | 0x50 |
subHospitalsName | 0x80 | 0xB0 | 0x00 | 0xF4 | 0x02 | 0x00 | 0x50 |
paidType | 0x80 | 0xB0 | 0x01 | 0x44 | 0x02 | 0x00 | 0x01 |
dateOfIssue | 0x80 | 0xB0 | 0x01 | 0x45 | 0x02 | 0x00 | 0x08 |
dateOfExpiry | 0x80 | 0xB0 | 0x01 | 0x4D | 0x02 | 0x00 | 0x08 |
updateDate | 0x80 | 0xB0 | 0x00 | 0x55 | 0x02 | 0x00 | 0x08 |
changeHospitalAmount | 0x80 | 0xB0 | 0x01 | 0x5D | 0x02 | 0x00 | 0x01 |