1

我正在尝试使用我的智能卡读卡器与卡进行通信,我正在使用 Jaccal 以便从我的 Java SE 应用程序中执行此操作。我遇到的问题是,即使我很确定我的 VERIFY 命令是正确的(离线 PIN),我仍然不断收到状态字 = 69 85(不满足使用条件)。所以我的命令看起来像这样。

验证命令:

00 20 00 80 08 24 94 94 FF FF FF FF FF

PIN 码是 9494,因为这是一张测试卡,我不介意公开 PIN 码。

问候维克

4

2 回答 2

3

在EMV 4.3 book 3, section '6.3.5 Coding of the Status Bytes' 中, Status word=69 85 被定义为“Command not allowed”(“使用条件不满足”,如您所述)

在您的应用程序和卡之间提供整个 EMV 对话将有助于故障排除,但这里有一些可能发生此问题的常见情况:

“此功能可以在读取应用程序数据之后和终端动作分析完成之前的任何时间执行。”

  • 您的卡不支持离线密码验证。

为了验证您是否遵守 VERIFY 命令的执行顺序,以下是典型执行顺序的示例:

  1. 选择文件
  2. 获取处理选项
  3. 阅读记录(根据需要多次)
  4. 获取数据
  5. 核实
  6. 生成应用程序密码

检查您的卡是否支持离线 PIN 验证:

  1. 检查响应 GET PROCESSING OPTIONS 命令返回的应用程序交换配置文件字段(AIP,标记 82)。如果支持持卡人验证,字节 1、位 5 应设置为 1,如“10.5 持卡人验证”部分所述。AIP 值示例:1C 00
  2. 在持卡人验证方法 (CVM) 列表(标签 8E)中,确保您具有有效的 CVM 规则,字节 1,位 1 = 1(意思是“ICC 执行的明文 PIN 验证”,附件“C3 持卡人验证规则格式”)。CVM 列表以 2 个每个 4 字节的数量字段开始,然后是可变数量的 2 字节 CVM 规则。CVM 列表的最后一条规则强制离线 pin 的示例:00 00 00 00 00 00 00 00 02 01 01 00。
于 2014-01-10T23:00:22.070 回答
1

使用验证命令的正确顺序如下

  • 选择支付应用

    00A4040007A000000003101000
    (or 00A4040007A000000004101000, or whatever application you want to use)
    
  • 获取处理选项

    80A8000002830000
    (possibly with adapted data objects according to PDOL)
    
  • (可选)检查当前的 PIN 尝试计数器

    80CA9F1700
    
  • 验证 PIN(如果卡支持使用纯文本 PIN 进行验证)

    002000800824xxxxFFFFFFFFFF
    (where xxxx is a 4 digit PIN)
    

如发现的那样,将只接受一个 PIN VERIFY 命令。

于 2014-01-10T13:36:02.770 回答