Как определить тип считывателя смарт-карт (контактный или бесконтактный) - PullRequest
1 голос
/ 09 декабря 2011

У меня есть уровень абстракции PC / SC, с которым я работаю (домашний кофе), и мне интересно, как определить тип читателя, с которым я могу взаимодействовать.В настоящее время я использую метод, который включал сопоставление регулярных выражений имен строк на основе имени читателя.Это нормально, примите, что нет никакого стандарта на то, как назвать читателя, заставляющего этот метод быть подверженным ошибке.У кого-нибудь есть конкретные предложения, которые можно попробовать, основываясь на каком-то общении с читателем на более низком уровне?

Надеюсь услышать некоторые идеи!

Ответы [ 3 ]

1 голос
/ 11 апреля 2017

Вы можете получить бесконтактный UID ISO 14443. Только для бесконтактных считывателей.

PC / SC "Часть 3. Требования к интерфейсным устройствам, подключенным к ПК", стр. 26, в таблице 3-8a: определяет APDU команды GET DATA, который возвращает UID бесконтактного устройства.

FF CA 00 00 00 

Итак, если команда выполнена успешно, вы знаете, что это бесконтактный читатель. Если команда не выполнена, либо ваш читатель не поддерживает команду, либо это читатель контактов.

Я знаю, что эти читатели поддерживают команду:

  • OMNIKEY CardMan 5x21-CL 0
  • Identive SDI011G Бесконтактный считыватель 0
  • Identive 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 (из Файлы спецификации рабочей группы ПК / SC ).

1 голос
/ 11 апреля 2017

Извините, я знаю, что это не ответ на ваш вопрос, но выслушайте это. Мое решение точно так же, как ваше. Из списка имен я проверяю их, если они содержат определенные части, а затем делаю вывод, если это известный тип или неизвестный читатель.

После этого, если читатель известного типа, я знаю, какой протокол использовать для читателя, а не только то, что это бесконтактный считыватель. А если у вас их два, вы знаете, что есть что.

Он прекрасно работает для меня (уже несколько месяцев), и если вы не должны переключать его по причине, которую я не понял, вы можете оставить все как есть.

1 голос
/ 16 февраля 2012

Я не знаю точно, что вы подразумеваете под типом читателя, но чтобы узнать всех читателей, подключенных к системе, вы можете использовать SCardListReaders (...) API.

Как определено на странице Microsoft MSDN :

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

Возвращает список всех читателей в строковом формате, например, для читателю SCM будет возвращено что-то вроде «SCM Microsystems Inc. SCL011 бесконтактный считыватель 0».

Надеюсь, это поможет !!

...