ogin_san_00のブログ
1
RC-S300とFeliCaカードの連携:Pythonを用いたIDm取得方法RC-S300とFeliCaカードをPythonで連携するには、PC/SC API(Personal Computer/Smart Card API)を利用することが不可欠です。Pythonでは、pyscardライブラリを活用することで、このAPIを介してカードリーダーとの通信を行い、ICカードのIDm(固有識別番号)を取得できます。1. PC/SC APIとは?PC/SC APIは、スマートカードリーダーとICカード間の通信を可能にする業界標準のAPIです。RC-S300はPC/SC対応のカードリーダーであり、PC/SC APIを使用することで、FeliCaカードの情報を取得できます。RC-S300でFeliCaカードを使用する場合の重要ポイント: ✅ nfcpyライブラリは使用不可(RC-S300が対応していないため)✅ pyscardライブラリを使用することでPC/SC APIにアクセス可能✅ WindowsやLinuxのPC/SCサービスが動作していることを確認2. 環境構築RC-S300でPythonからICカードの情報を取得するには、以下の準備が必要です。2.1 必要なライブラリのインストールPythonでRC-S300を制御するために、pyscardライブラリをインストールします。pip install pyscardまた、Windows環境ではPC/SC APIを利用するために、RC-S300の公式ドライバをインストールしておく必要があります。3. Pythonコード:RC-S300でFeliCaのIDmを取得以下のコードは、RC-S300を用いてFeliCaカードのIDmを取得するPythonスクリプトのサンプルです。from smartcard.System import readersfrom smartcard.util import toHexStringdef get_felica_idm(): try: # PCに接続されているカードリーダー一覧を取得 r = readers() if not r: print("カードリーダーが見つかりません") return None reader = r[0] # 最初に検出されたカードリーダーを使用 connection = reader.createConnection() connection.connect() # FeliCa Polling コマンド (APDUコマンド) felica_polling = [0xFF, 0xCA, 0x00, 0x00, 0x00] # コマンドを送信 response, sw1, sw2 = connection.transmit(felica_polling) if sw1 == 0x90 and sw2 == 0x00: idm = toHexString(response) # IDm(カードの固有識別番号)を取得 print(f"FeliCa IDm: {idm}") return idm else: print("カードの読み取りに失敗しました") return None except Exception as e: print(f"エラー: {e}") return None# 実行get_felica_idm()4. コードの解説4.1 カードリーダーの取得r = readers()readers() でPCに接続されているスマートカードリーダーを取得。読み取れるリーダーがない場合はエラーメッセージを表示。4.2 FeliCaのIDm取得felica_polling = [0xFF, 0xCA, 0x00, 0x00, 0x00]response, sw1, sw2 = connection.transmit(felica_polling)FF CA 00 00 00 は、PC/SC API経由でFeliCaカードのIDmを取得するためのAPDUコマンド。connection.transmit() でRC-S300にコマンドを送信し、応答データを受け取る。sw1 == 0x90 and sw2 == 0x00 の場合、成功としてIDmを取得。5. RC-S300を利用するメリット✅ PC/SC APIに完全対応 → Pythonから容易に操作可能✅ FeliCaやMIFAREなど、複数のICカードに対応✅ 小型で持ち運びやすく、WindowsやLinuxで動作6. まとめRC-S300はPC/SC APIを使用するスマートカードリーダーであり、pyscardライブラリを用いることで、PythonからFeliCaカードのIDmを取得できます。実装のポイント:pyscardを用いたPC/SC API経由での通信FF CA 00 00 00 APDUコマンドでIDm取得sw1 == 0x90 and sw2 == 0x00 の場合、読み取り成功この手順に従えば、RC-S300をPythonで制御し、ICカードの情報を取得できます。ソニー RC-S300 非接触ICカードリーダーライターPasori マイナンバーカード対応 e-Taxマイナンバーカード対応 ソニー 非接触ICカードリーダー/ライター usb PaSoRi RC-S380(e-Tax/eLTAX対応 確定申告 マイナポイント 行政手続き 交通系ICカード残高確認)Windows対応
2025年02月26日
閲覧総数 788