felicalib (0.4.2) | 2008-06-01 22:41 |
以下の情報は、でんのすけさんにいただいた情報、および guisaの実装(page3.nifty.com/slokar/pasori/gsuica)をベースにしています。
Suica/ICOCA/PiTaPa/PASMO/TOICA は基本的に同じフォーマットです。 Suica には入出場記録と履歴の2つのサービスコードがある。以下の説明は履歴のほうのみ。サービスコードは 0x090f。 (なお、IruCa はシステムコードが 0xde80 に変わるが、フォーマットは基本的に Suica 系と同じ)
各エントリは16バイト。フォーマットは以下の通り。
残高だけ little endian なので注意。
なお、物販とバスの場合、以下のようにフォーマットが変わる。
端末種の値は以下の通り
処理の値は以下の通り
http://www.denno.net/SFCardFan/ にあるサイバネ駅コードデータベースで調べられる。
端末種が 0xc7, 0xc8, 0x05 以外の場合。
駅名については地区コード(AreaCode)、線区コード(LineCode)、駅順コード(StationCode)から調べる。 ここで、地区コードは以下のように求める。
端末種が 0xc7, 0xc8 の場合。
店舗については、エリア(AreaCode)、端末(TerminalCode)、線区(LineCode)、駅順(StationCode)の4バイトで検索する。 エリアコードは 1:Suica/PASMO, 2:ICOCA, 4:IruCa となっている。しかし、履歴にはエリアコードは記録されておらず、 さらに Suica/PASMO 間でコード重複があるので、100% 確実に店舗名を知ることは不可能。
端末種が 0x05 の場合。
このときは、線区/駅順をキーに IruCa停留所コードテーブルを見れば良い。