Ответ, данный ранее, неверен.Это потому, что речь идет не о команде ISO 7816, а о внутренней команде API PC / SC.
APDU "0xFF 0xCA 0x00 0x00 0x00" на самом деле правильный, и у меня есть карты, для которых яполучить 7-байтовый ответ.Обратите внимание, что это будет работать только с бесконтактными (RFID) картами, поскольку этот UID является частью протокола радиосвязи.Также обратите внимание, что некоторые чипы будут возвращать новый случайный UID после каждого включения.Это относится, например, к моей паспортной карточке, а также к моей немецкой национальной идентификационной карточке и контрмерам для предотвращения слежения за держателями карточек.Теоретически такие случайные UID должны начинаться с 0x08, но это не всегда так.
Поскольку UID является «внутренним» значением протокола, рассматриваемый APDU НЕ отправляется на карту, а является тольковнутренняя команда (интерфейса ПК / SC) для получения UID из драйвера устройства чтения карт.CLA 0xFF обычно не используется в обычном режиме, так как он используется только для зарезервированного для «Выбор параметра протокола» (PPS).PC / SC использует этот CLA для внутренних команд.
Данная команда является внутренней командой «Get Data» для PC / SC, описанной в части 3, раздел 3.2.2.1.3 спецификации PC / SC.Здесь P1 и P2 имеют специальные предопределенные значения, поэтому нет смысла пробовать разные значения.Стандарт определяет только P1 = 0, P2 = 0 для получения UID и P1 = 1, P2 = 0 для «всех исторических байтов из ATS карты ISO 14443 A без CRC».Другие значения не поддерживаются.
Интересно, что ответ 0x6A 0x88 не определен в стандарте.0x6a 0x81 будет означать «Функция не поддерживается», что относится к тем картам, которые не имеют UID (в стандарте упоминается карта контакта 7816-10).Два других определенных ответа (0x62 0x82 и 0x6C 0xXX) определяют несоответствие между запрошенной длиной ответа и фактическим объемом данных и не будут возникать здесь, потому что мы просто запрашиваем любые данные о длине, указывая 0 в последнем байте запроса.
Так почему это не работает для отправителя, я не знаю.Для меня это работает, некоторые карты возвращают 4 байта, другие возвращают 7 байтов.
См. Стандарт PC / SC, в частности часть 3, здесь: http://www.pcscworkgroup.com/specifications/specdownload.php