「NFCでICカード読み込むってどう言うこと?」ってなったので調べてみた

確定申告のために、PaSoRiを購入された方もおられるのではないでしょうか?
あれを他の事にも利用できないかと考えたことは無いでしょうか?

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

最近では、「WebUSB API」と言うブラウザとデバイスを直接繋ぐ技術を使って、ブラウザーからPaSoRi経由でデータを読み込むと言う話も耳にします。
ブラウザの進化は止まりませんね…。

脱線してしまいましたが、
今回はICカードを扱う際に、仕様調査の触りとなる部分について触れたいと思います。

注意

今回取り上げるのは、NFCを用いたICカードについてです。
全てのタッチするICカード(非接触型)が必ずしもNFCではありませんのでご注意ください。

NFCとは

Suicaを改札を近づけると電子マネーで決済出来るのは、NFCと言う通信技術を使っているためです。
NFCとはNear field communicationの略で、日本語だと近距離無線通信と言います。

フィリップス(現: NXPセミコンダクターズ)とソニーが国際規格を決めた通信規格です。

www.sony.co.jp ja.wikipedia.org

カード種類

Suicaのようなタッチで扱えるカードをよく見かけます。
あれは何なのでしょうか?

ちなみに、SuicaはFeliCaとよばれる規格で、FeliCa Standardとよばれる種類になります。

NFCの規格で製作されたカードは複数ありますが、よく日本で見かけるのは次の2つになります。

名前 開発元 特徴
FeliCa ソニー(日本) 日本のみ普及している規格
MIFARE NXPセミコンダクターズ(オランダ) 海外で普及している規格

もちろん、厳密にはまだあるかもしれませんが、集められる情報だと2つに絞られます。

FeliCaについて

ソニーが開発した非接触型ICカードの規格のことです。
ソニーだけあって日本で多く普及されているカードです。

www.sony.co.jp

カード発行(厳密にはチップ発行)時に、IDmという固有IDを保持しているため、サービスを作るときはこの情報がキーとなります。
www.orangetags.jp

MIFAREについて

NXPセミコンダクターズが開発した非接触型ICカードの規格のことです。
日本以外で広く取り扱われている規格です。

FeliCa同様、カード発行時にUIDという固有IDを保持しています。
FeliCaと比べて、性能は低いものの価格が安いのが特徴です。

雑感

日本での認知度については、「NFC≒FeliCa」の様な状況です。
そのため、検索で得られる情報もFeliCaの方が多いです。

実装する場合の環境について

実際に開発、運用を行う場合はどう言う環境が良いのでしょうか?

日本だと情報が集めやすいFeliCaを使う前提で考えてみます。
その場合、下記のような環境が考えられます。

項目 種類 備考
PC windows バージョンは7以上
カードリーダー PaSoRi RCS380 2019年5月時点の現行モデル

カードリーダーについては、Sonyが作った製品であるためPaSoRiを使う事を前提にします。

実装方法について

最初に「WebUSB API」について触れましたが、現実的にはWindowsネィティブアプリで実装するのが良いと思われます。

何故、Windowsのネィティブアプリで実装する必要があるのか?

MicrosoftはPC/SC (Personal Computer/Smart Card)と言うNFC用の規格があります。

docs.microsoft.com

Windowsにも、規格を取得するためのAPIが標準搭載されています。
FeliCaのIDmであればこのAPIを使用して取得する事が可能です。
Windowsで開発した方が破綻しないアプリケーションが作れます。

ただし、FeliCaのカード自体に保存されているデータを読み込む場合は、カードリーダーの仕様に準じます。
FeliCaのカード内のデータを取り扱う場合は、SDKを利用する必要があります。

www.sony.co.jp

WebUSB APIの懸念点について

確かに、「WebUSB API」でSuicaのデータを読み込んだと言う話は聞きます。
qiita.com

ただし、上記の参考ページはとても高度な事をしています。
要は、「PC/SC」のような規格がないので自力で作ったと言うことになります。
低レイヤーの知識が無いと扱いきれるものではありません。

ちなみに、Web USB APIはChrome専用のAPIです。
developers.google.com

利用環境についても、ブラウザをChromeに縛る必要があったり、使用するPCで利用できるように設定する必要があります。

自社で実験的に使うだけであれば良いかもしれません。
しかし、客先で使うのであれば、様々なトラブルに備える必要が出てくると思われます。



以上です。
単純にICカードを使うと言っても、かなり色々な情報を知る必要がありました。

仕様調査する際の手がかりになればと思います。

©︎2017-2018 WebSandBag