Skip to content

Instantly share code, notes, and snippets.

@oboenikui
Last active June 12, 2024 00:34
Show Gist options
  • Save oboenikui/ee9fb0cb07a6690c410b872f64345120 to your computer and use it in GitHub Desktop.
Save oboenikui/ee9fb0cb07a6690c410b872f64345120 to your computer and use it in GitHub Desktop.
大学生協FeliCaの仕様

WHAT IS THIS

大学生協のFeliCa,及び諸大学の学生証一体型FeliCaの仕様
レスポンスについては,特に表記のない限り東北大学のもの (学生証一体型ではない)
断りのない限りコードはビッグエンディアンで通信する (下記のドキュメントに合わせた)
記号と区別するため,アルファベットの大文字表記は記号,小文字表記は16進表記とする

FeliCa自体の仕様については,Sony公式のドキュメントを参考に

System Code

番号 コード 内容
0 0x8365 不明
1 0xfe00 生協,学生証関連

Service Code

※コードはリトルエンディアンで送信することに注意

System 0 (0x8365)

コード 最大ブロックサイズ 説明
0x014b 4 不明
0x024b 8 不明
0x054b 8 不明

System 1 (0xfe00)

コード 最大ブロックサイズ 説明
0x1a8b 3 不明(学生証関連?)
0x434b 4 学生証関連(名前など)
0x50cb 6 組合員No,ミールカード,ポイント
0x50cf 10 利用履歴
0x50d7 1 残高,利用回数

Response

以下の略語を用いる

略語 意味
LE リトルエンディアン
BE ビッグエンディアン
HX 16進数表記の文字列で扱える.つまり
Integer.parseInt(Integer.toHexString(onebyte))
HXについて,例を挙げると,16進表記で
20 16 11 22 20 00 00

となっている (データは2016/11/22 20:00.00を表す)

0x1a8b

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

東北大学のでは特に情報はなかった

0x434b

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX 67 30 30 30 30 30 30 31
記号 サイズ(Byte) 説明
XX 不明 名前 (Shift-JIS)

東北大学のでは末尾の謎の8バイトのみ,この8バイトは共通だった.

0x50cb

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
WW WW WW WW WW WW XX 00 00 00 00 00 00 00 00 00
II 00 YY MM DD JJ JJ JJ 00 00 00 00 00 00 00 00
PP PP PP PP 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
記号 サイズ(Byte) 説明
WW 6 [HX] 組合員No/電子マネー管理番号
XX 1 NNの区分
04: 組合員
その他: 後述
II 1 ミールカード利用者(だった)かどうか
0: 現在過去ともに利用者ではない
1: 現在利用中/過去に利用したことがある
YY 1 [HX] ミールカード最終利用年(末尾2桁)
もしかすると前の1バイトと併せて2000年からの経過年になっているのかも
MM 1 [HX] ミールカード最終利用月
DD 1 [HX] ミールカード最終利用日
JJ 3 [HX] YYMMDDの日の利用額
PP 4 [BE] ポイント(10倍した値)

XXのその他については,恐らく広島大学の組合員証に関するページにある,システムに登録されるまでの約2週間の間は「電子マネー管理番号」という扱いなんだと思う

YYMMDDについては,非ミールカード利用者の場合はFeliCaの登録日が入っている気がする

IIについては,もしかするとミールカード利用者でなくなったときにミールカードの支払い処理をすると00に戻るのかもしれない

0x50cf

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
YY YY MM DD HH NN SS TT VV VV VV BB BB BB 00 00
                    ︙ (最大10ブロック,新しい順)
記号 サイズ(Byte) 説明
YY 2 [HX] 利用年 (こちらは20XX表記になっている)
MM 1 [HX] 利用月
DD 1 [HX] 利用日
HH 1 [HX] 利用時
NN 1 [HX] 利用分
SS 1 [HX] 利用秒
TT 1 [HX] 利用タイプ
01: 支払い
05: チャージ
VV 3 [HX] 差額(常に正)
BB 3 [HX] 残額

0x50d7

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
BB BB BB BB 00 00 00 00 00 00 00 00 00 CC CC CC
                    ︙ (最大10ブロック)
記号 サイズ(Byte) 説明
BB 4? [LE] 残額
CC 3? [HX] 利用回数(チャージを含むのかは確かめていない)
@Uhucream
Copy link

Uhucream commented Dec 6, 2020

ICカード読み取りアプリを開発していて、大学生協カードに対応したいと思っておりこちらのドキュメントを参考にさせていただいています。

大阪府立大にいる知人のカードの内容を見たところ、本ドキュメント内で0x1A8Bとして紹介されている内容がこちらの読み取りデータ(知人のカードのデータ)では0x434Bで、逆に本ドキュメントで0x434Bとして紹介されている内容が0x1A8Bだったのですが、これはドキュメントが間違っているのでしょうか?

@oboenikui
Copy link
Author

@Uhucream 現在私の手元に確認できるカードがないため確認を取ることができないのですが、記憶が正しければその2つのアドレスは大学によって格納される情報が異なっていたと記憶しています。

@Uhucream
Copy link

Uhucream commented Dec 6, 2020

@oboenikui

@Uhucream 現在私の手元に確認できるカードがないため確認を取ることができないのですが、記憶が正しければその2つのアドレスは大学によって格納される情報が異なっていたと記憶しています。

あ、そうなんですね。
これは失礼いたしました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment