ヨドバシでフラフラとデジタルグッズをながめに行ったときに、チラッと面白そうなものを見つけた。
PaSoRiである。
ttp://www.sony.co.jp/Products/felica/pcrw/
フェリカカードが読める、USB接続のカードリーダである。
簡単に言うと、スイカとかナナコとかエディとかカードの、中身が読める一品である。
そんなもんの中身を読んでも、普通の人は多分あんまり楽しくない。
せいぜい、いつ、いくら利用したかがわかる一覧を見るぐらいだろうか。
それも別にPCで見なくても、大抵はお店で見られたりするから、あんまいらんだろ。
しかし、DLLを使って、自分で中身を読むというのは、技術的には楽しそーだ。
たまたま会社にころがっていた同商品を使って、カードの中身を読んでみる。
仕事?なにそれ?
ttp://felicalib.tmurakam.org/
これを使えば、C#で簡単に読み込めた。
上のURLからダウンロードできるクラス(.cs)を組み込めば、それだけでもうほとんど完成。
ソースを書いてみる。
idmを読んで、pmmを読んで、1ブロックを読み出すソース。
pmmは、何に使うものなのか知らないけど。
1ブロック読み出しのReadWithoutEncryption()の第一引数、ここにはカードのサービスコードを指定する。
EDYは0x1317、スイカは0x090fなど、カードによって決まってるみたい。
会社にこれまた転がっていた、適当なフェリカカードは、サービスコードがわからんくて、読めなかった。
これが違ってると、nullが返る。
サービスコードが分からない場合は、力技で、0x0000~0xFFFFまでくるくる回して、null以外が返るのを待つようにすれば、探し当てられるかも。
0xffffまでであるという保証はないんかもしれんが。
ポーリングのところで、カードが無かったり、読めなかったら例外に飛ぶみたい。
カードがおかしいのか、カードが無いのかの判断は、いまのとこ出来ないくさい。
private void button1_Click(object sender, EventArgs e)
{
try
{
using (FelicaLib.Felica f = new FelicaLib.Felica())
{
f.Polling((int)FelicaLib.SystemCode.Common);
//Idmの読込
byte[] a = new byte[8];
a = f.IDm();
//pmmの取得
byte[] b = new byte[8];
b = f.PMm();
//1ブロック読込
c = f.ReadWithoutEncryption((int)FelicaLib.ServiceCode.Edy, 0);
if (c != null)
{
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}