当前位置: 首页 > 知识库问答 >
问题:

如何区分智能卡读卡器错误和智能卡错误

郗俊能
2023-03-14

我已经实现了一个Andoid应用程序-服务器端应用程序。服务器与智能卡读卡器通信。当用户在Android应用程序中触摸按钮时,将构建一个连接到服务器以验证用户。应用和服务器之间交换的消息具有以下格式:

<type> 0x00 0x00 0x00 <length> 0x00 0x00 0x00 <[data]>
  • 如果消息的类型值06,则表明智能卡读卡器中存在错误
  • 如果消息的类型值07,则表明智能卡中存在错误

我使用如下代码与智能卡读卡器进行通信:

// show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// get the first terminal
CardTerminal terminal = terminals.get(0);
// establish a connection with the card
Card card = terminal.connect("T=0");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
ResponseAPDU r = channel.transmit(new CommandAPDU(c1));
System.out.println("response: " + toString(r.getBytes()));
// disconnect
card.disconnect(false);

智能卡IO API具有异常的CardException类。我的问题是,我不知道何时发送类型为0607的消息,因为我无法区分卡生成的错误和引发CardException时读卡器生成的错误。我该怎么办?

共有1个答案

史昱
2023-03-14

中使用的transmit()方法

ResponseAPDU r = channel.transmit(new CommandAPDU(c1));

仅在与智能卡读卡器错误和读卡器与智能卡之间的通信问题相关的情况下引发异常。当卡本身指示错误时,它不会抛出异常。

因此,您可以通过捕获异常来捕获所有与读卡器相关的错误:

try {
    ResponseAPDU r = channel.transmit(new CommandAPDU(c1));
} catch (IllegalStateException e) {
    // channel has been closed or if the corresponding card has been disconnected
} catch (CardException e) {
    // errors occured during communication with the smartcard stack or the card itself (e.g. no card present)
}

由卡产生的错误被指示为响应状态字中编码的错误代码。这些错误不会产生Java异常。您可以通过检查状态字(方法getSW()响应APDU)来测试这些错误:

if (r.getSW() == 0x09000) {
    // success indicated by the card
} else {
    // error or warning condition generated by the card
}
 类似资料:
  • 问题内容: 我有一个IC接触式读卡器和SLE5528智能卡。想知道如何真正开始使用这些物品。 正在读取读取器,插入智能卡后看不到任何影响。 我还从http://www.openscdp.org/安装了opensmart的智能卡外壳 但是我不能用它来读任何读卡器。我想知道它是否有兼容性问题。 请我知道我可能不恰当地提出了这个问题,但是请那里的任何人帮助我。 任何相关的链接或有用的信息都可以帮助我入门

  • 前言: 我有一个双接口智能卡读卡器,具有一些扩展功能(除了向卡发送APDU命令和接收APDU响应)。 例如,在其文档中提到,您可以使用以下命令获取读卡器的固件版本: GET_FIRMWARE_VERSION: FF69 44 42 05 68 92 00 05 00 在它的工具,有一个按钮为这个功能,它的工作原理很好: 我甚至嗅了嗅USB端口,看看我的电脑和我的读卡器之间的连接中到底交换了什么:

  • 问题内容: 因此,最近我一直在使用具有一些信息的智能卡,而我想要在此处实现的目标是使用智能卡读取器通过任何Android智能手机从这些智能卡中获取此数据。我一直在使用HID OMNIKEY 3021 USB 智能卡读取器来读取这些卡(而且我知道此读取器可通过Windows应用程序与这些卡配合使用,因为我已经对此进行了亲自测试) 现在,Android提供了USB主机,只要Android智能手机支持它

  • 市场上最准确的卡路里计数器基于您的个人数据计算消耗的卡路里数: 体重、身高、年龄、性别 个人最大心率 (HRmax) 您的训练或活动的强度 个人最大摄氧量(VO2max) 卡路里计算基于加速度与心率数据的智能组合。卡路里计算用于准确测量您在训练中消耗的卡路里。 您可以在训练期间查看累计消耗的能量(单位:千卡 (kcal)),也可以在训练后查看消耗的总卡路里数。您还可追踪每日消耗的总卡路里数。

  • 市场上最准确的卡路里计数器基于您的个人数据计算消耗的卡路里数: 体重、身高、年龄、性别 个人最大心率 (HRmax) 您的训练或活动的强度 个人最大摄氧量(VO2max) 卡路里计算基于加速度与心率数据的智能组合。卡路里计算用于准确测量您在训练中消耗的卡路里。 您可以在训练期间查看累计消耗的能量(单位:千卡 (kcal)),也可以在训练后查看消耗的总卡路里数。您还可追踪每日消耗的总卡路里数。

  • 市场上可计算消耗的卡路里数的最准确的卡路里计数器,借助连续心率追踪甚至更为准确。能量消耗计算基于: 体重、身高、年龄、性别 个人最大心率 (HRmax) 训练期间以及连续心率追踪期间的心率 训练之外的活动测量与训练时无心率测试的活动测量 个人最大摄氧量 (VO2max) VO2max说明您的有氧健康情况。通过 Polar 体能测试,您能了解您的预估 VO2max。仅 Polar H7 和 H10