如何从Java的EMV SmartCard读取PAN


问题内容

我需要使用智能卡读取器从Maestro / Mastercard读取帐号。我正在使用Java
1.6及其javax.smartcardio软件包。我需要发送APDU命令,该命令将询问存储在卡芯片上的EMV应用程序以获取PAN号。问题是,我找不到规则的字节数组来构造APDU命令,该命令将在任何地方返回所需的数据…


问题答案:

您不需要进一步包装APDU。API层应注意这一点。

看起来0x6D00响应只是意味着该应用程序不支持INS。

现在只进行故障排除,但是您确实是从选择万事达卡应用程序开始的,对吗?

即是这样的:

void selectApplication(CardChannel channel) throws CardException {
  byte[] masterCardRid = new byte[]{0xA0, 0x00, 0x00, 0x00, 0x04};
  CommandAPDU command = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, masterCardRid);
  ResponseAPDU response = channel.transmit(command);
  return response.getData();
}