仕事で、これが原因で面倒なことになったので覚書。
※あんまり深くは書けない。まだまだ知識が浅いので・・・。
NFC搭載の携帯端末は今まで「FeliCa」としてのみ読取り可能だったが、
去年から「TypeA(Mifare)」としても読取り可能な端末が出てきたらしい。
目次
おサイフケータイの方式が増えた。
NFC対応携帯端末に搭載されている「おサイフケータイ」の決済サービスには
「FeliCa」と「TypeA/TypeB」という2種類の方式が存在する。
「FeliCaってなに?TypeA?TypeB?」って人まずググって下さい。
まぁ、そんな人はこのページ来ることはないだろうけど・・・。
とりあえずチョーざっくりと説明。
FeliCaとは?
・Sonyが作った非接触型ICカードの規格。
・日本では「SuiCa」に代表され、「nanaco」や「Edy」もその一つ。
・日本でのシェアが強いが、世界基準で見れば「Mifare」には敵わない。
Type A とは?
・TypeAはNXP作った非接触型ICカードの規格。主に「Mifare」と呼ばれる。
・「TypeA = Mifare」と思っていて支障はないが、微妙に違う。
・日本では「tasupo」や社員カード(?)みたいなもので使うことが多い。
・日本ではまだまだ馴染みが薄いが、世界的にはトップシェア。
Type B とは?
・Motorola社が開発した非接触型ICカードの規格。
・日本では「住民基本台帳カード」や「免許書」がこれになる。
・Aとの違いは通信速度の違いぐらいらしい・・・(これはあまり接点がない)。
※以後、TypeA・TypeBは「Mifare」として表記。
何がどうなった?
今まで(2013年度上期まで?)は日本では基本的に「FeliCa」方式を
採用したNFC対応携帯端末が支流となっていたが2013年度から
NTT docomoが海外でもおサイフケータイを使用できるように
するために、「TypeA/TypeB」方式を採用してきた。
参考URL:https://www.nttdocomo.co.jp/info/notice/page/130222_00.html
・・・で、それが何?
基本的にこの部分に関しては、ユーザー側は全く意識する必要ない。
「海外でもおサイフケータイ使えるの!やった~(・∀・)!」って
思っていればそれでいい。
ただ、その携帯端末側を読み取って何かしらの処理をする
リーダー/ライター(以下:R/W)を作っている側はそうも行かない。
問題点は?
「FeliCaもMifareもどっちも読み取り可能です!」というR/Wの場合。
今までは「FeliCa」としてしか反応しなかった携帯が「Mifare」としても
捉えることが可能になったということ。
つまり、しっかりとした識別処理をしていなければNFC対応携帯を
2つのICカード(FeliCa or Mifare)として判断してしまう。
システム的にどちらか片方だけに使える。
というのであれば問題はないが、両方OKの場合。
面倒なことになる可能性がある。
そして、Android側も(゚∀゚)!
Android 4.4 (KitKat)からNFCの機能に対し新機能が搭載される。
以下、「Android Developers Host-based Card Emulation」からの
直訳抜粋によるもの。詳細は公式サイトへGo。
NFC ホストベースカードエミュレーション(以下:HCE)
・ Android端末を「ISO14443A(TypeA)」としてR/Wに認識を可能にする。
・「ISO14443A 106kbps」のポーリング(カードを読み取る処理)で認識可能。
・ 認識された端末のUIDは全てランダムな値となる。
・ HCEの応答だと判断するにはSEL_REQで判断することが可能。
HCEからの応答だと判断する方法
上記にも記載はしているが、判断方法としてはカード読み取りの際の
識別タグ(SEL_RES)で判断する。尚、カードの種類(SENS_RES)は
「Mifare 1K」として応答があるので、SENS_RESだけではHCEを
判別は出来ないみたいです。
詳細はNXP発行「MIFARE Type Identification Procedure」の
P10 3.2 Coding of Select Acnowledge(SAK)の表を見るとわかりやすい。
個人的に色々試してみた結果
試しに、私が持っている「Xperia Z1」(Android 4.2.2 / docomo)が
Mifareとして読み取り可能かどうか、手持ちのR/Wで確認してみた所
ランダムなUIDの読取りに成功した。(NFCのON/OFFの関係なし。)
SIMカード(ピンク)を抜くと読み取れないことから、
Mifareとしての応答はSIMカードからだとわかる。
まぁ、Androidのバージョンがまだ4.2だし当たり前だけど。
で、結局の所。
今回の件は、多分俺の知識不足。
というか、「何を今更?」ってぐらいのもの
なんだろうなぁ・・・(´・ω・`;)
まったくこの業界は変化が多すぎて
バカはついていくのがやっとですよ・・・。