在Swift中从ATR确定卡号

时间:2016-06-09 04:46:32

标签: ios swift smartcard-reader contactless-smartcard emv

我正在使用ACS读卡器。我有一张非接触式VISA卡。通过读卡,我得到以下十六进制ATR信息:

3B 6E 00 00 80 31 80 66 B1 A3 01 01 21 0A 83 00 90 00

从上面的ATR,我如何检测卡号和类型?

2 个答案:

答案 0 :(得分:2)

你不能。

ATR(回复重置)不包含此类信息。事实上,由于您的卡是非接触式卡(ISO / IEC 14443-4),它甚至没有ATR,而是ATS(接听选择),这是非接触式“等效”(至少在术语上)包含的信息)ATR。

相反,您需要与您的卡交换APDU(ISO / IEC 7816-4)以从中获取更多信息。由于你参考VISA,你的卡可能会说非接触式卡的EMV协议(见http://www.emvco.com/)。

答案 1 :(得分:2)

ATR =复位应答,是来自卡的十六进制字符串,作为IFD / Card_Reader发送的复位命令的响应。它讲述了卡片属性,如 -

- card speed
- protocol (T=0, T=1) supported by card 
- etc..

如果您需要从卡中获取卡号/ PAN,则需要触发Read_Record命令以从卡中获取值。顺序将如下: -

  • Fire PPSE命令(如果您的卡支持PPSE安装在其中)

非接触式PPSE:

  00A404000E325041592E5359532E444446303100 // ppse command

它将为您提供卡中安装的应用程序的AID,在您的情况下将是

  

A0 00 00 00 03 10 10 //签证援助

选择申请

00 a4 04 00 07  A0 00 00 00 03 10 10 00

然后Fire GPO命令,它将为您提供AFL详细信息。接下来,您需要触发Read Record命令并搜索PAN Tag(5A)。

SO帖子对您有用..希望此信息可以帮助您获取所需的卡号/ PAN。