SmartCardIO EMV阅读器,找到我的卡类型,只有ATR号码

时间:2016-03-30 00:49:44

标签: java smartcard emv

我正在开始一个新项目,我是新用的EMV阅读器和Javax SmartCardIO。

我有每种类型卡的RID列表,但是我唯一可以在不知道卡类型的情况下访问的是ATR,我想知道是否有办法获取RID或卡类型只有这些信息,欢迎任何帮助。

提前致谢!

编辑:

我尝试用这种方法执行select PSE命令:

public static byte[] selectPSE(CardChannel channel) throws CardException {
    byte[] selectPSE = {(byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00, (byte)0x0E, (byte)0x31, (byte)0x50, (byte)0x41, (byte)0x59, (byte)0x2E, (byte)0x53, (byte)0x59, (byte)0x53, (byte)0x2E, (byte)0x44, (byte)0x44, (byte)0x46, (byte)0x30, (byte)0x31};
    CommandAPDU command = new CommandAPDU(selectPSE);
    ResponseAPDU response = channel.transmit(command);
    System.out.println(response.getBytes());
    return response.getBytes();
}

但是,它只与AMEX和Visa合作,我收到错误6a82,带有两张MasterCard卡(信用卡和借记卡)。

这看起来很奇怪,据我所知,所有主要发卡机构(包括万事达卡)都使用1PAY.SYS.DDF01,我可以通过试用和错误获取我想要的信息,但我不认为这是最好的解决方案。

2 个答案:

答案 0 :(得分:6)

AID(应用程序ID)= RID(已注册的应用程序ID)|| PIX(财产申请延期)

如何识别卡上安装的应用程序的最佳方法 - 使选择PSE EMV Book 1, 12 Application Selection, 12.3.2 Using the PSE中的详细说明。

您可以在图17中找到完整算法:使用目录的终端逻辑。

快速算法:

1)命令选择 PSE或PPSE。

  Send: 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00

  Responce will will contain:
   '6F' FCI Template M
      '84' DF Name M
      'A5' FCI Proprietary Template M
        '88' SFI of the Directory Elementary File M
        '5F2D' Language Preference O
        '9F11' Issuer Code Table Index O
        'BF0C' FCI Issuer Discretionary Data O

您可以在这里找到PSE的 SFI

2)命令 ReadRecord 1 SFI X

 Send: 00 B2 01 0C 00

  Receive list of tag. 
   '70' Application Elementary File (AEF) Data Template                
      '61' Application Template                                           
        '70' Application Elementary File (AEF) Data Template                
          '61' Application Template                                           
            '4F' Application Identifier (AID)
            '50' Application Label
            ...  and so on

查看标记'4F'应用程序标识符(AID)。从中您可以提取并比较RID。

你可以:

1)获取自己的AID列表并从中连续选择SELECT。

2)SELECT Default或Next应用程序并从响应中获取AID。

答案 1 :(得分:5)

无法通过ATR从卡中获取RID值。 ATR用于识别卡硬件和软件,它不用于获取有关已安装应用程序的信息(签证,签证电子,万事达卡等)https://eftlab.com/index.php/site-map/knowledge-base/212-emv-rid

有一种方法可以安装应用程序,阅读卡的支付系统环境(PSE)。您可以将读取PSE 命令发送至联系人​​卡片,并为非接触式卡片发送读取Proximity PSE 命令

联系PSE:

  

00A404000E315041592E5359532E4444463031

非接触式PPSE:

  

00A404000E325041592E5359532E444446303100

然后,如果安装了多个应用程序,则必须进行解析。