การเขียน Program เชื่อมต่อ Smart Card Reader และอ่านบัตรประชาชนไทย
การเชื่อมต่อ Smart Card Reader เพื่ออ่านข้อมูลบัตรประชาชนไทยในภาษา Python จะมีขั้นตอนที่ค่อนข้างละเอียด โดยในที่นี้จะอธิบายพื้นฐานเพื่อให้เข้าใจวิธีการทำงานเบื้องต้น รวมถึงแนะนำวิธีเขียนโปรแกรมเบื้องต้นเพื่ออ่านข้อมูลจากบัตรประชาชนไทย
1. ติดตั้งไลบรารีที่จำเป็น
สำหรับการเขียนโปรแกรมนี้ จำเป็นต้องติดตั้งไลบรารี pyscard ซึ่งเป็นไลบรารีที่ใช้สื่อสารกับ Smart Card Reader ผ่านโปรโตคอล PC/SC
ใช้คำสั่งนี้ในการติดตั้ง:
pip install pyscard
Code language: Python (python)
2. เตรียมโปรแกรมพื้นฐาน
หลังจากติดตั้งไลบรารีแล้ว มาเริ่มสร้างโปรแกรมเพื่อเชื่อมต่อกับ Smart Card Reader
ตัวอย่างโค้ดเบื้องต้นเพื่อค้นหา Card Reader และเชื่อมต่อกับบัตร
from smartcard.System import readers
from smartcard.util import toHexString
# ค้นหาผู้อ่านบัตร (Card Readers) ที่เชื่อมต่อกับเครื่องคอมพิวเตอร์
all_readers = readers()
if not all_readers:
print("ไม่พบ Smart Card Reader ที่เชื่อมต่อ")
exit()
# เลือก Reader ตัวแรก (ในกรณีที่มีหลายตัว ให้เลือกตัวที่ต้องการ)
reader = all_readers[0]
print(f"กำลังใช้ Reader: {reader}")
# เชื่อมต่อกับบัตรใน Reader
connection = reader.createConnection()
connection.connect()
print("เชื่อมต่อกับบัตรสำเร็จแล้ว")
Code language: Python (python)
3. อ่านข้อมูลจากบัตรประชาชนไทย
การอ่านข้อมูลจากบัตรประชาชนไทยจะใช้คำสั่ง APDU ซึ่งเป็นคำสั่งมาตรฐานในการสื่อสารกับ Smart Card โดยทั่วไป ข้อมูลที่ต้องการจากบัตรประชาชนไทย เช่น เลขบัตรประชาชน, ชื่อ, นามสกุล, วันเกิด, ที่อยู่ ฯลฯ จะอยู่ในแต่ละส่วนที่มีโครงสร้างข้อมูลตามมาตรฐาน
ตัวอย่างโค้ดเบื้องต้นสำหรับการส่งคำสั่ง APDU
# คำสั่ง APDU เบื้องต้นเพื่อเลือกแอปพลิเคชันบัตรประชาชน
select_apdu = [0x00, 0xA4, 0x04, 0x00, 0x08, 0xA0, 0x00, 0x00, 0x00, 0x54, 0x48, 0x00, 0x01]
data, sw1, sw2 = connection.transmit(select_apdu)
# ตรวจสอบสถานะการตอบสนองจากบัตร
if sw1 == 0x90 and sw2 == 0x00:
print("เลือกแอปพลิเคชันสำเร็จ")
else:
print("เลือกแอปพลิเคชันไม่สำเร็จ")
exit()
Code language: Python (python)
4. คำสั่ง APDU เพื่ออ่านข้อมูลจากบัตร
หลังจากเลือกแอปพลิเคชันของบัตรสำเร็จแล้ว ให้ส่งคำสั่ง APDU เพื่อดึงข้อมูลในแต่ละส่วนที่ต้องการ
ตัวอย่างโค้ดสำหรับการอ่านเลขบัตรประชาชน
# คำสั่ง APDU เพื่อดึงข้อมูลเลขบัตรประชาชน
id_card_apdu = [0x00, 0xB0, 0x00, 0x00, 0x0D] # ตัวอย่างคำสั่งจริงอาจแตกต่างไปตามบัตร
data, sw1, sw2 = connection.transmit(id_card_apdu)
if sw1 == 0x90 and sw2 == 0x00:
id_card_number = ''.join(chr(byte) for byte in data)
print(f"เลขบัตรประชาชน: {id_card_number}")
else:
print("ไม่สามารถอ่านเลขบัตรประชาชนได้")
Code language: Python (python)
หมายเหตุ
ในการอ่านข้อมูลเพิ่มเติมจากบัตรประชาชนไทย อาจต้องมีคำสั่ง APDU เพิ่มเติมตามประเภทข้อมูลที่ต้องการ เช่น ชื่อ นามสกุล วันเกิด เป็นต้น
5. ข้อควรระวัง
- การดึงข้อมูลจากบัตรประชาชนต้องปฏิบัติตามกฎหมายคุ้มครองข้อมูลส่วนบุคคล
- ควรตรวจสอบให้แน่ใจว่ามีการติดตั้งไดรเวอร์ Smart Card Reader และบัตรรองรับมาตรฐานที่ใช้