磁気カードで遊んだ記録 〜李下に冠を正さず〜
2017/12/28 7M4MON
概要
MagSpoof (by Samy Kamkar)というクレジットカードなどの磁気カードをエミュレーションする、ぁゃιぃ オープンソース・ハードウェアがあるのですが、
これに手を加えて日本で普及している「JIS X 6302-2 附属書JA 『おもて面磁気ストライプ付き識別カード』 」の記録/再生装置を製作しました。
特徴
- 日本で普及している「JIS X 6302-2 附属書JA 『おもて面磁気ストライプ付き識別カード』 」に対応
- EEPROMに10個までのカード情報を保存可能
- 保存したカード情報はロータリースイッチで選択可能
- 読取り機能を搭載し、その場でカードをスワイプして内容を保存可能
- Felicaの IDm Spoofer の磁気カード版
JIS X 6302-2 附属書JA 『おもて面磁気ストライプ付き識別カード』について
日本で普及している診察券や会員証、ポイントカードなどは、いわゆる JIS-II タイプのカードというもので、
(国際)クレジットカードの記録方式とは磁気の記録形式やデータのフォーマットが異なります。
規格書はこちらのページにありますが、必要なものを簡単にまとめると下記の通りです。
|
クレジットカード |
JIS-IIのカード |
記録面 |
裏
|
表
|
トラック数
|
2 |
1
|
トラック番号
|
1
|
2
|
---
|
ビット構成
|
7
|
5
|
8(7+Parity)
|
最大文字数
|
79
|
40
|
69+3
|
開始文字
|
%
|
;
|
0x7F(DEL)
|
終了文字
|
? |
0x7F(DEL) |
文字に対するビットシフト
|
32
|
48
|
0
|
区切り文字 |
^
|
= |
規定無し
|
通称 |
ジスイチ
|
ジスニ
|
主な使用国
|
全世界
|
日本
|
規格書を読んでも分からなかったのですが、水平冗長検査文字(LRC 文字) の初期値?は国際規格が0で、国内規格は0xFFのようでした。
STXとETXが同じですが、逆方向のスワイプはLRCチェックで弾くことが可能です。
ハードウェアについて
- マイコン周りはArduino Nano(ATmega328P, 5V, 16MHz)を使用
→ Pro MiniはI2Cのピンが内側でOLEDの接続が面倒&ISPコネクタがないのでEEPROMを弄れない
- 表示装置はSSD1306 搭載の128x32のOLEDを使用。
→ ライブラリはu8glib、フォントは pro11r 、1行あたり20字×4行 = 80文字。
→→ Adafruitのライブラリはメモリ消費量が多かったので遠慮しました。
→→→ 自動で折り返しがなかったので自前で組みました。
- 緑ボタン押しながら電源ONで読取り&記録モード
→ IDmSpooferと同じ
- 磁界発生装置はソレノイドを使用。中に鉄のボルトとナットを埋め込み、磁力強化を図っています。
- ドライバICはTC4424 を使用。オリジナルのL293Dと比較して省スペース、高速です。
読取り&記録モードについて
- 元ネタはB. Gian James氏が製作した MagCardReader というものです。
- 上記サイトにて説明されている通り、セルフクロックタイプの読取り装置が必要です。
- 日本システム開発のPDC-816UK(検証で使用)の磁気リーダーモジュール V3A-2-01P を接続します。
MagCardReaderからの追加機能としては
- JIS-II対応
- パリティチェック追加
- 水平冗長検査文字(LRC)チェック追加
- 読取り文字数チェック追加
- 読取り後にEEPROM記録&OLEDに表示
といったところです。
ソースコードなど
githubに置きましたのでご自由にどうぞ
余談
- 砂鉄めっちゃ便利。ストライプが巧妙な印刷で隠れているパターンでも砂鉄で発見できます。特に表と裏に両方磁気情報があるパターンのやつ。
- 2つのプログラムを統合したのでコーディングスタイルがバラバラ。
- JIS-IIのカード書き込み装置はヤフオクで6千円台で買えるっぽいので、単にコピーカードを作りたいだけならそっちの方が。