如何阅读基于EMV的智能VISA卡详细信息

时间:2011-06-28 08:38:09

标签: emv

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

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

谢谢, 谢卡尔

5 个答案:

答案 0 :(得分:6)

首先,PPSE applet对于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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

对我来说有点奇怪......我的研究表明,对于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列表。

希望它有所帮助。 Ezfrag

答案 3 :(得分:0)

您可以使用this one之类的AID列表。但是有些卡会回复“错误”#34;迭代列表时的数据。即,我有一个V-Pay VISA卡被读为Maestro的情况。如果你必须遍历一个大的AID列表来打开"打开"卡信息,我建议你添加一个标志来从卡中获取实际的AID,然后返回主方法来读取提供主AID的卡。

类似的东西:

  1. 读取卡片迭代AID列表
  2. 如果返回0x90(成功读取),则提取数据
  3. 检查返回的数据的类型是AID(0x4f)。
  4. 如果是这样,请清除您的列表并使用正确的AID再次获取数据,因为您知道它是正确的,因为它直接来自卡。
  5. 由于AID通常出现在卡片的第一个记录中,因此该循环可确保以最低的时间成本完成该过程。

答案 4 :(得分:0)

当您第一次使用此1PAY.SYS.DDF01命令时,卡首先会在其中响应2 AID列表,这时会出现一些错误,因此您将使用返回代码RETRY给出此6A82错误。您必须在其中使用ENRTY Libs是一些删除命令,然后再次设置app select命令,这样它将自动获得第二个AID,并且比您的签证卡获得成功。