C#でFelicaからIDを読む

2006/07/09

Categories: csharp felica

以前、Felicaを使ったシステムを企画してみたいなぁとふいに考えた。で、Felicaを使った(Felicaにアクセスする)開発には「SDK for Felica」という製品が必要だ。SDKにはLiteからEnterpriseまで出来ることの違う製品がいくつかある。
当時、いいタイミングで「IC CARD WORLD 2005」というのがビッグサイトでやっていたので、これに出かけていってソニーのブースでSDKの値段やら色々聞いてみた。Liteを使えばフリー領域のみではあるが読み書きが出来るというので、さっそく購入しようと代理店2社に電話した。そしたら「個人の方にはお売りできません」との返事。がっかりだ。
※ホントにシェアとりたいんだったらSDKは個人にも開放して、どんどんアプリやシステムを書かせればいいと思うんだけどね。

それから1.5年ほどたって、ふとオープンソースマガジンを手にとると、自前で解析して読み取りを成功させている人がいるじゃないか。恐ろしいことよ。(「SFCardPeeper」のことは以前から知っていたが、技術情報を整理して雑誌に載せた、というのがすごいと思う)さっそくプロジェクトのページからダウンロードしてSuicaを読ませてみる。自分が持っていたR/WはS310だったので見事に読めず。

やむを得ずビックカメラでS320をゲットしてきた。携帯にもFelicaが載るようになったせいか、S320の読み取り部分はフラットになった。なので、自分のように机の上が雑然としていて、水平にR/Wを置けない環境では、載せたカードがすべり落ちてしまう。この辺はS310の方がよかったなぁ、などと思いつつチャレンジ。S320に変えたらあっさり読めた。

じゃあ、早速何か書いてみよう、とlibpasoriを眺めたのだが、unixとソース共用を意識しているせいか開発環境がcygwinやMinGWなんだな。それに最近はC#が好きだし、C#からアクセスできるようにしたいなぁ、ということでlibpasori.NETを書いてみた。

注意:要するにラッパーを書いただけなので、Felicaおよびlibpasoriの技術的な情報は何もありません。libpasoriの情報はlibpasori - RC-S320操作コードを参照

方針

準備

libpasori.NET

簡単なサンプル

        static void Main(string[] args)
        {
            Pasori ps = null;

            try
            {
                ps = Pasori.Open();

            }
            catch (LibPasoriException ex)
            {
                Console.Error.WriteLine("パソリの初期化でエラー");
                return;
            }

            try
            {
                Felica fc = ps.Polling(SystemCode.ANY);
                Console.Out.WriteLine("IDm:" + fc.IDm_text);
                fc.Close();
            }
            catch (LibPasoriException ex)
            {
                /*
                 * 現在のところエラーなのか、何も読めなかったのかは区別がないので
                 * 例外を無視
                 */
            }
            
            ps.Close();
        }

で、サンプルがこれ。パソリをUSBポートに挿して、Felica(僕のところで試したのはSuicaとauのお財布ケータイ)をかざせば、カード固有のIDを読み取ることができる。

libpasori.NET(ソースとサンプルexe:約330KB)
  • Visual Studio 2005 on XP Proでコンパイルしたもの。他の環境で動くかどうかわかりません。
  • この配布物の使用は自己責任で。何が起こっても作者は責任を負いかねます。
  • NOD32アンチウイルス パターン1.1650(20060707)でチェック済み。
  • ただのラッパーにライセンスを謳うのも気が引けるけど、ソースの改変、配布は自由です。
    • libusb、libpasoriについては、上述の両プロジェクトのページを参照してください。
>> Home