การเชื่อมต่อกับเครื่องอ่านสมาร์ทการ์ดในภาษา Java
สำหรับนักพัฒนาที่ต้องการเชื่อมต่อเครื่องอ่าน Smart Card Reader ด้วยภาษา Java สามารถเริ่มต้นได้ผ่านไลบรารี javax.smartcardio ซึ่งอยู่ใน Java Standard Edition โดยแนวทางนี้ช่วยให้โปรแกรมสามารถตรวจจับเครื่องอ่าน, รอการ์ดถูกเสียบ, เชื่อมต่อกับการ์ด และส่งคำสั่ง APDU เพื่อรับข้อมูลจากสมาร์ทการ์ดได้อย่างเป็นระบบ
ภาพรวมการทำงาน
โครงสร้างการเชื่อมต่อใน Java เริ่มจากการสร้าง TerminalFactory เพื่อดึงรายการเครื่องอ่านการ์ดที่มีอยู่ในระบบ จากนั้นเลือกเครื่องอ่านที่ต้องการใช้งาน ตรวจสอบว่ามีการ์ดอยู่ในช่องอ่านหรือไม่ แล้วจึงเปิดการเชื่อมต่อกับการ์ดผ่าน Card และ CardChannel ก่อนส่งคำสั่ง APDU ไปยังการ์ดเพื่ออ่านค่าที่ต้องการ
แนวทางนี้เหมาะกับงานยืนยันตัวตน, งานลงทะเบียน, งานอ่านข้อมูลบัตร, หรืองานพัฒนาระบบเฉพาะทางที่ต้องใช้งานร่วมกับ Smart Card Reader บนเครื่องคอมพิวเตอร์
องค์ประกอบสำคัญ
ขั้นตอนการเชื่อมต่อกับ Smart Card Reader
สร้าง TerminalFactory
เริ่มต้นด้วยการเรียกใช้งาน TerminalFactory เพื่อค้นหาเครื่องอ่านการ์ดที่พร้อมใช้งานในระบบ
TerminalFactory factory = TerminalFactory.getDefault();ดึงรายการเครื่องอ่านการ์ด
เมื่อได้ factory แล้ว สามารถเรียกดูรายการของเครื่องอ่านทั้งหมดผ่าน terminals().list() และตรวจสอบว่าระบบพบอุปกรณ์หรือไม่
List<CardTerminal> terminals = factory.terminals().list();รอให้มีการ์ดในเครื่องอ่าน
หลังเลือกเครื่องอ่านที่ต้องการใช้งานแล้ว โปรแกรมสามารถรอจนกว่าจะมีการ์ดถูกเสียบเข้ามาในเครื่องอ่าน ก่อนเริ่มต้นการเชื่อมต่อจริง
terminal.waitForCardPresent(1000)เชื่อมต่อกับการ์ดและส่ง APDU
เมื่อตรวจพบการ์ดแล้ว โปรแกรมจะเชื่อมต่อกับการ์ดผ่าน terminal.connect("*") จากนั้นดึง Basic Channel เพื่อส่งคำสั่ง APDU และรับผลตอบกลับจากการ์ด
ResponseAPDU response = channel.transmit(command);ตัวอย่างโค้ด Java สำหรับเชื่อมต่อเครื่องอ่านและส่งคำสั่ง APDU
ตัวอย่างคำสั่ง APDU ในบทความนี้
GET CHALLENGE
เป็นตัวอย่างคำสั่ง APDU ที่ใช้ทดสอบการสื่อสารกับการ์ด และให้การ์ดตอบข้อมูลกลับมา
00 84 00 00 08ผลลัพธ์ที่ได้รับ
ข้อมูลตอบกลับจากการ์ดสามารถนำมาแปลงเป็นเลขฐานสิบหกด้วยฟังก์ชันช่วย เช่น bytesToHex()
System.out.println(bytesToHex(responseData));ข้อควรทราบก่อนพัฒนาระบบจริง
- หากนำไปอ่านบัตรประชาชนไทย ข้อมูลบางส่วนอาจต้องแปลง encoding ให้เหมาะสมเพื่อให้แสดงผลภาษาไทยได้ถูกต้อง
- คำสั่ง APDU ที่ใช้กับการ์ดแต่ละประเภทอาจแตกต่างกัน ควรอ้างอิงเอกสารของบัตรหรือระบบที่ใช้งานจริง
- ควรมีการตรวจสอบกรณีไม่พบเครื่องอ่าน, ไม่พบการ์ด, หรือการ์ดตอบกลับผิดรูปแบบ เพื่อให้โปรแกรมทำงานได้เสถียรยิ่งขึ้น
- หากเป็นงานองค์กร ควรออกแบบส่วนจัดการสถานะอุปกรณ์และข้อผิดพลาดเพิ่มเติมนอกเหนือจากตัวอย่างพื้นฐาน
กำลังมองหา Smart Card Reader สำหรับพัฒนาโปรแกรม?
The Compete พร้อมให้คำแนะนำด้านเครื่องอ่านบัตรสมาร์ทการ์ด, อุปกรณ์ที่เหมาะกับการพัฒนาโปรแกรม และการประยุกต์ใช้งานในระบบยืนยันตัวตน, ระบบอ่านบัตร และระบบเฉพาะทางขององค์กร