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.