質問

携帯電話と通信したい EMV スマートカードを取得しました。通信自体はIsoDep経由で問題なく動作するのですが、ATRを取得する方法がわかりません。私の知る限り、インテントには ATR が含まれているはずですが、そのために必要なコードを教えていただけますか?

あるいは、これが不可能な場合は、答えが ATR である SELECT などのコマンドを使用してカードをウォーム リセットする方法を誰かが知っているかもしれません。

役に立ちましたか?

解決

非接触型カードには ATR がありません。ただし、ATS (Answer to Select) の履歴バイトに興味があるかもしれません。これらは呼び出して取得できます getHistoricalBytes():

Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
IsoDep iso = IsoDep.get(tag);
NfcA nfcA = NfcA.get(tag);
if (nfcA == null || iso == null)
   return; // not an IsoDep+NfcA tag
byte[] histBytes = iso.getHistoricalBytes();
...

これは ISO 14443 タイプ A タグ (NfcA)。タイプ B タグの場合 (NfcB)、調べてみるとよいでしょう getHiLayerResponse().

他のヒント

非接触カードはATRを返します。ただし、現在のAndroid NFC APIからATRを取得できません。Android NFC APIはATRからの履歴バイトのみを返します。

ATRを返す理由 ATRはリセット対応7816回答です。リーダー(この場合はNFC電話)は、ISO 7816(T= CL)APDU Exchangeを使用してスマートカードと協議します。これは、非接触インターフェイスISO 14443-4を介して輸送されます。この場合、ISO 7816があるので、あなたはATRを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top