2009年1月30日金曜日

'PaSoRi'を使用して、FeliCaカード内の'IDm'を読み取る

このプログラムは、SONY製の PaSoRi を使用して、FeliCaカード内の'IDm'を読み取るプログラムです。(PMmも読み取ります。)



 近年、FeliCaカードが普及するに従って(SUICA,PASMO,Edyなどなど)FeliCaカードを利用した事務機器が増えてきました。鍵管理BOX/ロッカー/キャビネット/コピー機/入退室管理システム などなど。
 どの機器も既に使用しているFeliCaカードを機器に登録するだけで使えるようになると謳っているのですが、オフィスのマネージャ(管理)からすると勝手に登録されてはせっかくの認証機能の意味がありません。当然これらの登録操作はマネージャが行うのですが、登録しなければならないカードの数が多いと管理するのが大変ですし、カード対応の事務機器もだんだん増えてきて機器毎にいちいちカード登録をしなければならないのでマネージャの管理業務は増大するばかりです。
 そこで、ちょっと気の利いた事務機器ではカードをかざして登録する代わりにカードコードが登録されたCSVファイルを取り込んでカード登録の手間を省いてくれるものがあります。しかし、このCSVに”記入しなければならないカードコードがわからない!”というのが新たな悩みではないでしょうか?
 このプログラムを使えば、悩みも解決です。ほとんどの事務機器ではFeliCaカード内部に記録されている「IDm」と呼ばれるコードをカード識別コード(IDコード)として利用しています。IDmは非常に安価(約2600円)なリーダー「PaSoRi」でも読み取ることが出来ます。

なぜこのプログラムが必要なの?
残念なことに「PaSoRi」に付属するソフトウェアでは「IDm」を見ることが出来ないのです。このプログラムを使えば「IDm」を確認することが出来ます。

このプログラムを作成するに当たり [亜細亜大学であがたが行う授業に関するサイトです。]を参照させていただきました。


[PaSoRiReader.jar] - コンパイル済み実行モジュール

[Felica.java] - Javaプログラムソースファイル

[FelicaIdReader.java] - Javaプログラムソースファイル

[build.xml] - antビルドファイル(おまけ)


【動作チェック環境】

  • OS: Windows XP sp3 / Windows Vista

  • リーダー: SONY PaSoRi RC-S330

  • JRE: JavaRE 1.6

* Windows以外では動作しません。
* Java実行環境が必要です。JRE1.5以降


【必須ライブラリ】

  • 'felicalib.dll'
    http://felicalib.tmurakam.org/
    felicalib は、USB接続の FeliCa(フェリカ) リーダ PaSoRi(パソリ) を使って、FeliCa にアクセスするためのライブラリです。Suica, Edy, nanaco などの電子マネーへのアクセスなどに使用できます。
    フリーソフト (BSD ライセンス)

  • 'PaSoRi'の接続と'FeliCaポートソフトウェア'のインストール
    http://www.sony.co.jp/Products/felica/pcrw/

  • 'JNA.jar'ファイル
    https://jna.dev.java.net/
    Java Native Access



【インストールと起動方法】
  1. PaSoRiを接続して、'FeliCaポートソフトウェア'をインストールする。
  2. 適当なディレクトリを作成して、下記の3ファイルを置く。
    • PaSoRiReader.jar
         本プログラム本体
    • jna.jar
         Java Native Access
    • felicalib.dll
         felicalib
  3. 'PaSoRiReader.jar'をダブルクリックすると起動します。


【制限事項】
  • お財布ケータイのFeliCaは読めません。
  • 'FeliCaポートソフトウェア'がインストールされていても、「PaSoRi」が接続されていなければエラーになります。

5 件のコメント:

ふぃろ さんのコメント...

大変参考になりました。
情報提供ありがとうございます。
この情報を元にJNLPやアプレットなどにして、ガジェット化が出来たらと試行錯誤しております。
自分の端末だけであればJNLPもアプレットも動くのですが・・・公開はできそうにありません。署名付きなどの問題が大きいので。orz

ふぃろ さんのコメント...

ガジェット化成功しました。ありがとうございます。

Masa さんのコメント...

こんにちは。大変参考になりました。

記載のプログラムそのままではFelica互換でもIDmが読めないカードがありました。

getIDメソッド及び、getPMメソッドを以下に修正すると、どのカードでも読めました。

対策前:
felicaHandle = FelicaLib.INSTANCE.felica_polling(pasoriHandle, systemCode, (byte)0, (byte)0);

対策後:
felicaHandle = FelicaLib.INSTANCE.felica_polling(pasoriHandle, (short)0xFFFF, (byte)0, (byte)0);

felicalib.dll側はunsigned shortを使っていますが、Javaはsigned shortであるため、ワイルドカードsystemCode(0xFFFF)が記載できないための制限と思われます。ご参考まで。

Unknown さんのコメント...

はじめまして。
突然の投稿すみません。

新人プログラマの鈴木といいます。
今、プライベートでPaSoRiを使った開発をしています。
適当なディレクトリを作成して、下記の3ファイルを置きダブルクリックしたのですが、実行されません。

PaSoRiReader.jar
jna.jar
felicalib.dll

動作環境が原因かなと思いますが、ご教授願います。
動作環境:
・Win8
・JRE7(eclipse kepler)
お忙しいところすみません。

yoshioka さんのコメント...

横からですが、もし64bitの環境でしたら、32bit用のJDKを入れないと動かないと思います。
既にお試しでしたらすみません。