Giter Club home page Giter Club logo

thaisamrtcard's Introduction

ThaiSamartCardReader

การใช้งาน ThaiSmartCardReader Libary


ซึ่งตัวไลบารี่จะมีชนิดข้อมูลที่ให้บริการ 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()); // ข้อมูลช่วงอายุของผู้รับบริการ
}

การติดต่อกับเครื่องอ่านสมาร์ทการ์ด

ADPU

เป็นหน่วยการติดต่อแบบพิเศษ เรียกว่า aplliacation protocol data units ใช้เพื่อแลกเปลี่ยนข้อมูลกับ Type 4 Tag platform

C-ADPU

: คำสั่งที่ถูกส่งมาจากอุปกรณ์อ่านการ์ด

R-ADPU

: คำตอบที่ถูกส่งมาจากเครื่องอ่านการ์ด

ADPU Types

Field Description
Select เลือกแอพพลิเคชั่นหรือไฟล์
ReadBinary อ่านข้อมูลจากไฟล์
UpdateBinary เขียนข้อมูลลงในไฟล์

C-ADPU

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

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

thaisamrtcard's People

Contributors

phanuwat043 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.