การเขียน Program เชื่อมต่อ Smart Card Reader พร้อมการตรวจสอบสถานะต่างๆ
ในการเขียนโปรแกรมเชื่อมต่อ Smart Card Reader และตรวจสอบสถานะต่าง ๆ ของอุปกรณ์ด้วย Python สามารถทำได้โดยใช้ไลบรารีที่ชื่อว่า pyscard ซึ่งเป็นไลบรารีที่รองรับการทำงานกับ Smart Card และ Smart Card Reader ในระบบต่าง ๆ โดยละเอียดสามารถทำตามขั้นตอนดังนี้:
ขั้นตอนที่ 1: การติดตั้ง
pyscard
ก่อนอื่นให้ติดตั้งไลบรารี
pyscard
โดยใช้คำสั่งด้านล่าง:
pip install pyscard
Code language: Python (python)
ขั้นตอนที่ 2: การเขียนโปรแกรมเชื่อมต่อ Smart Card Reader
เมื่อทำการติดตั้งเสร็จแล้ว คุณสามารถใช้โค้ดนี้เพื่อเชื่อมต่อกับ Smart Card Reader และตรวจสอบสถานะของอุปกรณ์ได้:
from smartcard.System import readers
from smartcard.Exceptions import NoCardException
from smartcard.util import toHexString
# ตรวจสอบว่ามี Smart Card Reader เชื่อมต่ออยู่หรือไม่
def connect_reader():
try:
reader_list = readers()
if not reader_list:
print("ไม่พบ Smart Card Reader ที่เชื่อมต่ออยู่")
return None
print(f"พบ Reader: {reader_list[0]}")
return reader_list[0]
except Exception as e:
print(f"เกิดข้อผิดพลาดในการเชื่อมต่อ: {e}")
return None
# ฟังก์ชันสำหรับอ่านข้อมูลจากการ์ด
def read_card(reader):
connection = reader.createConnection()
try:
connection.connect()
print("เชื่อมต่อกับ Smart Card สำเร็จ")
# ส่งคำสั่ง APDU ไปยังการ์ดเพื่ออ่านข้อมูล (ตัวอย่าง)
# คำสั่งนี้ขึ้นอยู่กับชนิดของการ์ดที่ใช้และการอ่านข้อมูลที่ต้องการ
apdu_command = [0x00, 0xA4, 0x04, 0x00, 0x00] # APDU Command ตัวอย่าง
data, sw1, sw2 = connection.transmit(apdu_command)
print("ข้อมูลที่อ่านได้:", toHexString(data))
print(f"สถานะการ์ด: {hex(sw1)} {hex(sw2)}")
except NoCardException:
print("ไม่มีการ์ดใน Reader")
except Exception as e:
print(f"เกิดข้อผิดพลาดในการอ่านข้อมูลจากการ์ด: {e}")
finally:
connection.disconnect()
# ตัวอย่างการใช้งาน
reader = connect_reader()
if reader:
read_card(reader)
Code language: Python (python)
อธิบายโค้ดทีละขั้นตอน
- ฟังก์ชัน
connect_reader()
: ฟังก์ชันนี้จะตรวจสอบว่า Smart Card Reader เชื่อมต่ออยู่หรือไม่ หากเชื่อมต่ออยู่ จะคืนค่าตัวอ่าน (reader) ที่พบตัวแรก - ฟังก์ชัน
read_card(reader)
: ฟังก์ชันนี้ใช้เชื่อมต่อกับการ์ด หากมีการ์ดอยู่ใน Reader จะส่งคำสั่ง APDU เพื่ออ่านข้อมูลจากการ์ด ตัวอย่างนี้ใช้คำสั่งAPDU
ที่เป็นค่าทั่วไป ซึ่งอาจต้องปรับแต่งตามรูปแบบของการ์ดและข้อมูลที่ต้องการอ่าน - การจัดการข้อผิดพลาด: มีการตรวจสอบข้อผิดพลาดเช่น ไม่มี Reader หรือไม่มีการ์ดอยู่ใน Reader เป็นต้น เพื่อให้โปรแกรมทำงานได้ราบรื่นขึ้น