Como ler um cartão mifare com leitor hid 5321 em Ruby

Essa é uma dica bem específica, mas que demorou pra conseguir fazer “funcionar”.

Primeiro de tudo é necessário instalar a gem smartcard, e também o comando pcscd ( que já vem instalado no OS X )

gem install smartcard

depois disso, com o seguinte código é possível pegar o uid ( serializado ) de um cartão mifare:

require 'smartcard'
context
= Smartcard::PCSC::Context.new
card
= Smartcard::PCSC::Card.new(context, context.readers.last)
uid
= card.transmit( [255, 202, 0, 0, 0].pack('C*') ).unpack('C*')

No caso, estou utilizando o readers.last porque o meu leitor de cartão tem duas posições de leitura ( em cima e dentro ), e utilizo apenas a leitura dos cartões por cima.

Se por acaso der um erro de Smartcard::PCSC::Exception, cheque se instalou corretamente os drivers do leitor de smartcard para sua plataforma (no caso dos produtos hid, fica em http://www.hidglobal.com/driverDownloads.php?techCat=19 ), e se ao rodar manualmente o comando pcscd -afd e encostar o cartão aparece uma mensagem de reconhecimento.