none
Còdigo em VB.net para interpretar a leitura de um cartão de proximidade RRS feed

  • Pergunta

  • Estou com um problema para interpretar um leitor de proximidade, uma vez que eu passo o cartão e ele não gera nenhuma saída. Vi alguns comentários na internet que é necessário a criação de uma classe de decodifica a leitura, alguém teria alguma idéia de como implementá-la em VB.net?
    quinta-feira, 6 de dezembro de 2012 10:29

Respostas

Todas as Respostas

  • Sem saber qual é o leitor de cartao fica dificil te responder... É a mesma coisa que eu te perguntar:

    "Eu preciso fazer um prato para o meu almoço. Tenho que usar o fogao para isso. Como posso fazer isso?" 

    Nao tem como responder se eu nao te disser o que eu tenho na geladeira. Certo?

    Voltando a sua questao:

    Existe um manual para o desenvolvedor (SDK)? Qual é a marca do leitor? viu se possui algum exemplo pronto em outra linguagem? Ele se liga a usb ou alguma plca especial para aquisiçao?

    Respondendo isso creio que a gente podera te ajudar.

    Att



    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quinta-feira, 6 de dezembro de 2012 16:04
    Moderador
  • Modelo do HID - 5352AGN00, sem manual.

    exemplo em java:

    /**
     *
     */
    package br.com.vlg.util;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Enumeration;

    import javax.comm.CommPortIdentifier;
    import javax.comm.NoSuchPortException;
    import javax.comm.PortInUseException;
    import javax.comm.SerialPort;
    import javax.comm.SerialPortEvent;
    import javax.swing.JOptionPane;

    /**
     * @author fmedeiros
     *
     */
    public class VlgLeitor {

        private static final int INTERVALO_NUM_BINARIO_INICIAL = 10;
        private static final int INTERVALO_NUM_BINARIO_FINAL = 26;

        private CommPortIdentifier commPort;
        private SerialPort serialPort;
        private InputStream inputStreamEntrada;

        private int numeroCartao;


        /**
         * Abre porta disponiveis do sistema operacional
         *
         * @param p_bEscolherPorta
         *            <code>boolean</code> true caso queira que o sistema abra as
         *            portas disponiveis.
         * @param p_sNomePorta
         *            <code>String</code> nome da porta a ser aberta.
         */

        public void abrirPortaSerial(boolean p_bEscolherPorta, String p_sNomePorta) throws Exception{

            ArrayList<String> arrayPortas = this.getPortas();
            String sNomePorta = p_sNomePorta;

            if(p_bEscolherPorta){
                sNomePorta = escolherPortas(arrayPortas);
            }

            if ( arrayPortas.size() > 0 ) {

                try {

                    this.commPort = CommPortIdentifier.getPortIdentifier(sNomePorta);
                    this.serialPort = (SerialPort) commPort.open("SComm", 1000);
                    this.inputStreamEntrada = serialPort.getInputStream();

                } catch (NoSuchPortException e) {
                    VlgLog.error(e);
                } catch (PortInUseException e) {
                    VlgLog.error(VlgBundleTraducao.getLabel("MSG_PORTA_EM_USO"), e);
                    throw new Exception(VlgBundleTraducao.getLabel("MSG_PORTA_EM_USO"));
                } catch (IOException e) {
                    VlgLog.error(e);
                    throw e;
                }

            }
            else{
                VlgLog.error(VlgBundleTraducao.getLabel("MSG_PORTA_NAO_ENCONTRADA"),null);
                throw new Exception(VlgBundleTraducao.getLabel("MSG_PORTA_NAO_ENCONTRADA"));
            }
        }


        /**
         * Exibe JOPtionPane para escolha da porta.
         *
         * @param p_ArrayPortas
         *            <code>ArrayList</code> portas do sistema.
         * @return <code>String</code>
         */
        private String escolherPortas(ArrayList<String> p_ArrayPortas) {
            String sRetorno = null;
            String listaEmString = "";

            for (int i = 0; i < p_ArrayPortas.size(); i++) {
                listaEmString += p_ArrayPortas.get(i) + ",";
            }

            listaEmString = "[" + listaEmString.substring(0, listaEmString.lastIndexOf(",")) + "]";

            sRetorno = JOptionPane.showInputDialog(null, VlgBundleTraducao.getLabel("MSG_LISTA_PORTAS_ENCONTRADAS")+listaEmString);
            return sRetorno;
        }


        /**
         * Retorna todas as portas disponiveis no sistema.
         *
         * @return
         */
        private ArrayList<String> getPortas() {

            @SuppressWarnings("unchecked")
            Enumeration<Object> listaDePortas = CommPortIdentifier.getPortIdentifiers();
            ArrayList<String> portas = new ArrayList<String>();
            while ( listaDePortas.hasMoreElements() ) {
                portas.add(((CommPortIdentifier)listaDePortas.nextElement()).getName());
            }
            return portas;
        }

        public void sair() {
            serialPort.close();
            System.out.print(serialPort.toString());
    //        System.exit(1);
        }

        public InputStream getInputStreamEntrada() {
            return inputStreamEntrada;
        }

        /**
         * Retorna conteudo lido do cartao.
         *
         * @param p_serialPorEvent
         *            <code>SerialPortEvent</code> evento.
         * @return <code>SerialPortEvent</code>
         */
        public String getInputEntrada(SerialPortEvent p_serialPorEvent) {

            StringBuilder sbDadosLidos = new StringBuilder();

            try {

                if (p_serialPorEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {

                    BufferedReader reader = new BufferedReader(new InputStreamReader(this.inputStreamEntrada));

                    String linha = "";
                    while ((linha = reader.readLine()) != null) {
                        sbDadosLidos.append(linha);
                        break;
                    }
                }

                this.setNumeroCartao(this.generateNumeroCartao(sbDadosLidos.toString()));

            } catch (Exception e) {
                VlgLog.error(e);
                JOptionPane.showMessageDialog(null, VlgBundleTraducao.getLabel("MSG_ERRO_SISTEMA"));
            }

            return sbDadosLidos.toString();
        }

        /**
         * Retorna objeto SerialPort.
         *
         * @return <code>SerialPort</code>
         */
        public SerialPort getSerialPort() {
            return serialPort;
        }

        /**
         * Gera o numero do cartao em inteiro.
         *
         * @param p_sNumeroHexa
         * @return
         * @throws Exception
         */
        public int generateNumeroCartao(String  p_sNumeroHexa) throws Exception {

            try{

                VlgLog.info("Executando metodo getNumeroCartao ( " + p_sNumeroHexa + ")" );

                StringBuilder sbBinario = new StringBuilder();
                String sHexa = "";
                String sBinario = "";

                for(int i=0; i<p_sNumeroHexa.length(); i++){

                    sHexa = ""+p_sNumeroHexa.charAt(i);
                    sBinario = Integer.toBinaryString( Integer.parseInt(sHexa, 16));

                    if(sBinario.length() == 1){
                        sBinario = "000"+sBinario;
                    }else if(sBinario.length() == 2){
                        sBinario = "00"+sBinario;
                    }else if(sBinario.length() == 3){
                        sBinario = "0"+sBinario;
                    }

                    sbBinario.append(sBinario);
                }

                sbBinario = new StringBuilder(sbBinario.toString().substring(sbBinario.toString().indexOf("1")));
                sBinario  = sbBinario.toString().substring(INTERVALO_NUM_BINARIO_INICIAL,INTERVALO_NUM_BINARIO_FINAL);

                return Integer.parseInt(sBinario,2);

            }catch (Exception e){

                VlgLog.error(e);
                throw e;
            }

        }

        /**
         * Retorna numero do cartao lido .
         * @return
         */
        public int getNumeroCartao() {
            return numeroCartao;
        }


        /**
         * Seta o numero do cartao.
         * @param numeroCartao
         */
        public void setNumeroCartao(int numeroCartao) {
            this.numeroCartao = numeroCartao;
        }

    }

    Gostaria de colocar no VB.net, pois preciso mostrar no textbox e fazer uma pesquisa do cartão no BD.

    quinta-feira, 6 de dezembro de 2012 17:25
  • Seu leitor é o irmao mais velho deste aqui (o seu ja saiu fora de linha):

    ProxPro 5355 - http://www.hidglobal.com/prod_detail.php?prod_id=7

    Mas creio que a documentaçao seja a mesma.

    Voce vai ter que entra com o fabricante para que ele te forneça um manual com o metodo de acesso em VB.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quinta-feira, 6 de dezembro de 2012 18:38
    Moderador