運転免許証の中身について+読み取るときの注意点
こんにちは…でいい時間なのかな?
10月あたりにiOSアプリの開発環境に触る機会がありCoreNFCを用いる事になったのでせっかくだから、得た知見を保存するためにQiitaに投稿を決意しました。
今回はCoreNFC関連ということで、現在treastrain氏(https://qiita.com/treastrain) が現在取り扱っている運転免許証についての注意事項等を記載していきます。
運転免許証の仕様について
取得できる内容についてや、Application Protocol Data Unit (APDU) コマンドについてはまた機会があれば記載させていただきます。(参照する場合、章-ページで表させていただきます)
今回フォーカスを当てるのはデータの形式についてです
書いてる途中に変換処理を書いた記事が公開されていたのでソフトめに仕様について説明できればと思います
説明する要素
- JIS X 0201
- JIS X 0208
- JPEG2000
JIS関連
JIS X 0201
-
日本産業企画(JIS)に収録されている文字コード規格
- 制定しているのは日本産業標準調査会(JISC)
-
7ビット及び8ビットを用いた情報交換用符号化集合
-
ASCⅡ文字集合をベースに作成されている
主に使う要素は
-
数字:
0x30
(0)~0x39
(9) -
英字
- 大文字:
0x41
(A)~0x5A
(Z) - 小文字:
0x61
(a)~0x7A
(z)
- 大文字:
-
片仮名:
0xB1
(ア)~0xDD
(ン)これらがメインになると思います。
運転免許証の処理では主に数字を取り扱いますが、(DF01/EF07格納)署名検証の発行者名や主体者名は英字やスペース、ドットマークが利用されるので注意(技術仕様2-9ページ参照)
JIS X 0208
- 0201と同様にJISが制定している
- 7ビット及び8ビットの2バイト情報交換用符号化漢字集合
- 漢字集合:漢字6,335文字及びラテン文字、ひらがな等の524文字の非漢字が含まれる集合のこと
- 符号化方式には以下3種類を用いてる
- Shift-JIS
- EUC-JP
- ISO-2022-JP
- 住所や本籍、名前や免許条件に用いられる
- JIS X 0201と比べると、利用できる文字が多い
- 1983年と1990年にJIS83, JIS90制定時に一部文字が変更されている
- 実装例はこちら を参照してください…
JPEG 2000
- Joint Photographic Experts Groupによって開発された画像のデータフォーマット形式(公式)
- Macでは標準だが他OSだと標準対応していない
- 2000年ころに規格されているが2019年現在でも少ない ⇒ 通常のJPEGよりも処理時間が増加されることが対応されない原因?
- JPEGとは圧縮アルゴリズムを離散コサイン変換からウェーブレット変換に変えた関係で、ブロックノイズを解消することができている
- WindowsやAndroidで利用するには時間がかかりそうだが、iOS開発であれば
UIImageView
にバイナリを突っ込むだけで表示が可能
読み取るときの注意点
すでにいろいろなところで書かれているが、パスワード(PIN)を間違えないこと!!!3回失敗することで免許証の中身がロックされて、解除には各都道府県公安委員会の権限になる(仕様2-5ページ参照)
失効された免許証とかでテストをしている人は…復帰が効かない可能性が高い(あくまで予想だが、すでに失効したものを復帰させる理由がないですし…)。プログラムとして事前にできそうなノーマルな対応策は
- 各PIN認証でエラーを確認して、どちらを間違えたかを確認できるようにする
- 桁数が違った場合はPIN認証前に処理を止める(事前に止めることで再試行の回数を減らさない)
おそらく、ほとんどの方が思いつくであろう物ですが、保険及び自分の再確認のために記載しておきます。
まとめ
- 運転免許証の内部データはバイナリだけでなく他の仕様も存在する
- 特にJPEG2000はiOS標準対応しているため、他OS等よりは開発の容易さが高いと思われる
- PINは3回失敗でロック。解除の手続きが
面倒時間がかかることもあるので注意する
簡易に記載しましたが「CoreNFC」ができて初めて使用を見て「なんだこの符号フォーマット!?!?」といったかたの一助になればと思います。何かありましたらコメントまでお願いします。遅筆ですがお返事致します