如何确定智能卡读卡器的类型(接触式与非接触式)



我有一个PC/SC抽象层,我正在使用(自制),我很好奇如何确定我可能与之交互的读者类型。我目前正在使用一种方法,涉及基于阅读器名称的字符串的名称正则表达式匹配。这没关系,但要承认没有关于如何命名阅读器的标准,这导致该方法容易出错。有人有什么具体的建议可以尝试吗?这可能是基于与读者的一些较低层次的交流?

希望听到一些想法!

我不知道你说的阅读器类型是什么意思,但是要知道所有的阅读器连接到系统,你可以使用SCardListReaders(…)API。

在Microsoft MSDN页面上定义:

LONG WINAPI SCardListReaders(
  __in      SCARDCONTEXT hContext,
  __in_opt  LPCTSTR mszGroups,
  __out     LPTSTR mszReaders,
  __inout   LPDWORD pcchReaders
);

这将以字符串格式返回所有读取器的列表,例如,SCM读取器将返回类似"SCM Microsystems Inc."的内容。非接触式阅读器0".

希望这有帮助!!

您只能在非接触式读卡器上获得ISO 14443非接触式UID。

PC/SC的"Part 3"。表3-8a:定义了一个GET DATA命令APDU,它返回非接触式设备的UID。

FF CA 00 00 00 

因此,如果命令成功,您就知道它是一个非接触式阅读器。如果命令失败,说明您的阅读器不支持该命令,或者它是一个联系人阅读器。

我知道这些阅读器支持以下命令:

  • OMNIKEY CardMan 5x21-CL 0
  • 相同SDI011G非接触式读写器0
  • 同类SDI010非接触式读写器0
  • SCM Microsystems Inc.SDI011G非接触式读写器0
  • ACS ACR1252 1S CL Reader PICC 0

查看pcsc3_v2.01.09.pdf中的Pcsc1-10 V2 01 14.zip(来自PC/SC工作组规范文件)

对不起,我知道这不是你问题的答案,但是听我说。我的解决方法和你的完全一样。从名字列表中,我检查它们是否包含特定的部分,然后我得出结论,如果这是已知类型或未知的阅读器。

之后,如果阅读器是已知类型,我知道阅读器使用什么协议,而不仅仅是它是非接触式阅读器。如果你有两个,你知道哪个是哪个。

它对我来说工作得很好(现在已经好几个月了),如果你不需要因为我不理解的原因而切换它,你可以让它保持原样。

相关内容

  • 没有找到相关文章

最新更新