10yroの開発日記

福岡にある株式会社10yro(トイロ)のエンジニアが書いています

C# PCSC Sharpを使ってICカードのIDを読み取る

今回はC#ICカードに入っているIDを取得する方法についてです。
ICカードリーダーとの連携は1から実装するのは気が遠くなりそうなので、今回はPCSC Sharpという以下のライブラリを利用しました。
ICカードはマイフェア(Myfair)、フェリカ(Felica)を想定しています。

github.com

PCSC Sharpのインストール

まずWindows Formsの新規プロジェクトを作成します。
その後にNugetでPCSC、PCSC.Iso7816をインストールしましょう。

プロジェクトを右クリック→「Nugetパッケージの管理」をクリックします。
参照で「pcsc」と入力して、「PCSC」「PCSC.Iso7816」をインストールします。

インストールされました。

画面

今回は以下のような簡単な画面を作成しました。
「モニター開始」をクリックすると、カードリーダーを監視し、ICカードを認識したらボタンの下にある欄(リストボックス)に取得したIDを表示します。

初期処理

初期処理として、画面ロード時にICカードリーダーの存在チェックを行います。 11行目でPCに接続されているICカードリーダーを取得して、その中から対象となるICカードリーダーが存在するかチェックしています。

モニター開始

モニター開始ボタンをクリックすると、ICカードリーダーにICカードがかざされるのをモニターします。
ICカードを検知する(ICカードリーダーの状態が変わる)と、27行目のStatusChangedというイベントが発火されますので、そのイベントにMonitor_StatusChangedというメソッドを登録しています。
このメソッド内でIDを取得してリストボックスにIDを表示します。

実際にIDを取得するメソッドは以下となります。

実行してみる

以下の動画のようにモニター開始後にリーダーにカードをかざすと、IDを読み取ってくれます。

PCSCSharpを使うと簡単に実装できました。
ソースコードは以下に置いています。

github.com

弊社では一緒に働いてくれる仲間を募集しています。
ご興味ある方はご連絡ください! 10yro.co.jp