ゆうです、こんにちは。
今回は、SONY製のカードリーダー「RC-S300」を使用して、FelicaカードのIDmを取得するプログラムを作成してみます。
開発環境について
OS:Windows11(23H2)
使用ソフト:Visual Studio Code
使用言語:Python
使用ライブラリ
今回は、スマートカードリーダーを操作するためのライブラリ「pyscard」を使用します。
下記のコードをコマンドプロンプトに貼り付けしインストールを行います。
pip install pyscardプログラムの作成
1.ライブラリのインポート
from smartcard.Exceptions import NoCardException
from smartcard.System import readers2.カードリーダーを取得
reader = readers()
# ↓Printで利用可能なリーダーを確認できます。
print("利用可能なカードリーダー:", reader)3.カードリーダーの選択と接続
# 最初のリーダーを使用
connection = reader[0].createConnection()
# 接続
connection.connect()4.IDmの取得
# カードのIDmを読み取るコマンド
GET_IDM_APDU = [0xFF, 0xCA, 0x00, 0x00, 0x00]
# コマンドを送信してIDmを取得
response, sw1, sw2 = connection.transmit(GET_IDM_APDU)5.IDmを表示させる
# ステータスコードが正常な場合、IDmを表示
if sw1 == 0x90 and sw2 == 0x00:
idm = response
idm_hex = ''.join(format(byte, '02X') for byte in idm)
print("カードのIDm:", idm_hex)
else:
print("カードのIDmを取得できませんでした")全体の流れ
def read_felica_lite_idm():
try:
# カードリーダーの取得
reader = readers()
print("利用可能なカードリーダー:", reader)
# 最初のリーダーを使用
connection = reader[0].createConnection()
# 接続
connection.connect()
# Felica Lite-SカードのIDmを読み取るためのコマンド
GET_IDM_APDU = [0xFF, 0xCA, 0x00, 0x00, 0x00]
# コマンドを送信してIDmを取得
response, sw1, sw2 = connection.transmit(GET_IDM_APDU)
# ステータスコードが正常な場合、IDmを表示
if sw1 == 0x90 and sw2 == 0x00:
idm = response
idm_hex = ''.join(format(byte, '02X') for byte in idm)
print("Felica Lite-SカードのIDm:", idm_hex)
else:
print("Felica Lite-SカードのIDmを取得できませんでした")
# 接続を解除
connection.disconnect()
except NoCardException:
print("カードが読み込めませんでした")
if __name__ == "__main__":
read_felica_lite_idm()Visual Studio Codeでコードを張り付けて実行すると、
カードのIDmがコンソール画面に表示されます。



コメント