【问题标题】:How to Read EMV based smart VISA card details如何读取基于 EMV 的智能 VISA 卡详细信息
【发布时间】:2011-09-24 03:08:21
【问题描述】:

我正在尝试从 VISA 卡中读取信用卡数据,但无法成功。在互联网资源中,我发现对于 MASTER 卡,我们可以使用 1PAY.SYS.DDF01 选择 PSE 目录文件,然后读取记录。但是对于 VISA,它不是强制性的,当我使用以下文件使用 SELECT 命令获取 PSE 目录时,我得到的响应为“6A82”。这意味着文件系统不支持它。我在 EMV 4.2 Book 1(EMV 规范)中查找了错误,它说我们必须使用“AID 列表”。它说“终端使用其列表中的下一个 AID 发出另一个 SELECT 命令”。 我无法理解这一点并继续前进。

对如何获取 VISA 卡的 PSE 或获取信用卡详细信息的 AID 有任何帮助吗?

谢谢, 谢卡尔

【问题讨论】:

    标签: emv


    【解决方案1】:

    当您使用此 1PAY.SYS.DDF01 第一个命令时,卡将首先响应内部的 2 AID 列表存在一些错误,因此您给出此 6A82 错误并返回代码 RETRY。您必须在其中使用 ENRTY Libs是一些删除命令,然后再次设置应用程序选择命令,所以它会自动获得第二个 AID,然后你的签证卡就会成功。

    【讨论】:

      【解决方案2】:

      您可以使用像 this one 这样的 AID 列表。然而,一些卡片在遍历列表时会响应“错误”的数据。即,我遇到过 V-Pay VISA 卡被读取为 Maestro 的情况。如果你必须遍历一个大的 AID 列表来“打开”卡片信息,我建议你添加一个标志来从卡片中获取实际的 AID,然后返回到 main 方法来读取带有主 AID 的卡片提供。

      类似:

      1. 遍历 AID 列表读取卡片
      2. 如果返回0x90(读取成功),提取数据
      3. 检查返回数据的类型为 AID (0x4f)。
      4. 如果是这样,请清除您的列表并使用正确的 AID 再次获取数据,因为您确定它是正确的,因为它直接来自卡。

      由于 AID 通常来自卡中的第一条记录,因此此循环可确保流程正确且时间成本最低。

      【讨论】:

        【解决方案3】:

        首先,PPSE 小程序既不是针对 VISA 也不是针对 MasterCard。它由 EMV 定义,如您正确注意到的那样用于列出卡上可用支付应用程序的 AID。但如果它不存在,终端会尝试所有支持的 AID 来构建候选列表。

        如果您想选择 VISA 小程序,但您不知道完整的 AID,您可以使用部分选择。由于所有 VISA AID 都以 VISA 的 RID 开头:A0 00 00 00 03。您可以尝试发送此命令:

        这将返回第一个实例:

        00 A4 04 00 05 A0 00 00 00 03 00

        如果你的卡上有,这会给你更多:

        00 A4 04 02 05 A0 00 00 00 03 00

        【讨论】:

        • @KamKamen Goranchev 你知道上述命令的响应 APDU 应该是什么吗?
        • 如果存在具有给定 RID 的应用程序,则响应将是状态字 61XX。如果是这样,请使用 GET RESPONSE 命令检索完整的 AID。
        【解决方案4】:

        这对我来说有点奇怪...我的研究表明,对于 VISA,该应用程序将始终可用,但对于万事达卡,这不是强制性的...

        无论如何,这是我发送给读卡器以选择该应用程序的命令:

        //               OP CL P1 P2 LN DATA------------------------------------- EL
        //select command 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
        
        NSString* str= @"1PAY.SYS.DDF01";
        NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
        int datalength = data.length; 
        NSMutableData *selectPSECommand = [[NSMutableData alloc] init];
        
        [selectPSECommand appendBytes:"\x00" length:1]; //command class
        [selectPSECommand appendBytes:"\xA4" length:1]; //APDU_INSTRUCTION_SELECT_FILE
        [selectPSECommand appendBytes:"\x04" length:1]; //select file by name
        [selectPSECommand appendBytes:"\x00" length:1]; //First or only occurrence of file
        [selectPSECommand appendBytes:&datalength length:1]; //data length
        [selectPSECommand appendData:data]; //the data we are sending
        [selectPSECommand appendBytes:"\x00" length:1]; //expected response length. here it is 0. We are only selecting a file.
        

        代码示例适用于 Objective C。

        将您发送的数据与我发送的数据进行比较,看看是否一致。与此同时,我会研究一下 AID 列表。

        希望对您有所帮助。 埃兹弗拉格

        【讨论】:

          【解决方案5】:

          所以问题是您不知道卡上您的应用程序的 AID?没有办法得到它们(除了 PSE),你必须首先知道你支持的卡上的应用程序。因此,“AID 列表”是您支持的 AID 列表,这是您的收单机构告诉您的。您可以尝试根据您在此处列出的一些标准 AID 自己创建此列表:http://en.wikipedia.org/wiki/EMV#Application_selection

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-27
            • 2010-09-21
            • 1970-01-01
            • 1970-01-01
            • 2022-01-01
            • 1970-01-01
            • 2023-03-21
            • 2021-07-27
            相关资源
            最近更新 更多