Ler código de barras através de um leitor óptico com ASP.NET

Não há nenhum segredo ou driver específico para realizar a leitura. Basicamente o leitor óptico lê o código de barras, converte para string e retorna para o buffer de entrada do computador. Ou seja, é como se fosse digitar no teclado! Acabou o mistério...
Há várias formas de codificação do código de barras e quem é responsável por essa codificação/decoficação pode ser tanto a leitora quanto a aplicação. Irei considerar em nosso exemplo que o que a leitora lê e irei utilizar não me importando o que seja. Supondo e para fins ilustrativos que nosso código de barras seja essa aí de cima, o valor de entrada seria 3805565154 (frisando novamente, apenas supondo). A leitora irá passar para nossa aplicação a seguinte entrada 3805565154 ENTER. A maioria das leitoras já facilitam sua vida forçando o ENTER ao terminar de ler o conteúdo. Então fica fácil! Vamos por a mão na massa.
Crie uma tela com apenas um TextBox. Criei essa bonitinha aqui:

Selecione o TextBox, vá na guia Properties e clique no ícone de Events. Adicione um evento em KeyDown conforme a figura abaixo:

Com isso, ao digitar qualquer valor no TextBox, irá disparar esse evento. Mas como queremos ler apenas o valor completo, adicionamos uma determinada condição para começar a analisar apenas quando pressionar/entrar o ENTER, logo nosso código ficaria da seguinte forma:

private void txtNumero_KeyDown(object sender, KeyEventArgs e)
{
        if (e.KeyCode == Keys.Enter)
        {
                string entrada = txtNumero.Text;
                txtNumero.Text = "";
        }
}
 
Ou seja, a cada entrada de caracteres, ativo o evento mas só iniciarei a análise quando a entrada for um ENTER. Ao final, zero o conteúdo do TextBox para que possa dar uma nova entrada. Daí você pode adicionar outras instruções no meio para fazer o que quiser. Eu complementei a aplicação fazendo uma consulta em um banco de dados e analisando se existe ou não um determinado cupom. Vamos aos testes...
A leitora que usei é plugada diretamente na entrada PS/2 do teclado. A depender de sua leitora pode ser na USB, na PS/2 ou utilizar algum adaptador específico. Depois de conectado, inicie sua aplicação. Posicione o leitor sobre o código de barras e pressione o botão para realizar a leitura e voilá... Sua aplicação irá ler a entrada e realizar o processo que desejar.
Minha aplicação leu um cupom cujo número codificado era 1000909. Bem fácil e útil... 
Quem quiser saber mais informações como tipos de codificações, como gerar/codificar/decodificar strings para código de barras no Access, acessem esse artigo da MSDN que é bem interessante e explicativo.

17 comentários:

Anônimo disse...

Será necessário instalar alguma dll do leitor de código de barras para que o asp.net identifique o leitor ?

Thiago Marçal disse...

Não é preciso de DLL para a leitura. A maioria dos leitores hoje são conectadas diretamente na porta PS/2 do teclado ou na USB. Então quando há a leitura é como se fosse digitado, ou seja, é como se você estivesse teclado a informação e presisonado ENTER logo em seguida. Mas avalie qual leitora esteja usando pois o comportamento de cada uma pode distinguir a depender do modelo / marca.

Anônimo disse...

Estou com uma pequena dúvida...
Tenho uma aplicação de controle de vendas onde coloquei um leitor ótico para reconheciimento de código do banco, para puxar o produto correspondente.
Porém, quando o leitor ótico lê o produto ele insere seu código + \n\n.Ou seja minha aplicação não consegue deixar fixo o valor lido pelo leito no meu inputText. Estas quebras de linha faz com que a aplicação avance um passo...
Teria como eu deixar com que o leitor não quebrasse estas duas linhas ao ler um código de produto???!!!

Fico no aguardo...
Valeuu,
Abs,

Thiago Marçal disse...

O \n\n inserido pela leitora após a leitura do código corresponde a dois ENTERS caso fosse pelo teclado. Como você quer manter no campo, TextBox, o código sem a quebra você pode usar o seguinte artifício quando estiver lendo: capture o campo, limpe o TextBox, remova o \n\n da string capturada e reinsira apenas a string com o código. Se você estiver usando o código acima ou uma variação dela, veja abaixo como poderia ser:

if (e.KeyCode == Keys.Enter)
{
string entrada = txtNumero.Text.Replace("\n", "");
txtNumero.Text = entrada;
}

Anônimo disse...

Legal. O codigo de barras é do DVD Amigos Por Siempre. Massa

TH Informática disse...

Thiago!Blz?
Otimo seu Post, estou trabalhando com WebForms. Sabe me dizer como fazer esquema KeyDown via webForms?
Obrigadão!Abraço

Thiago Marçal disse...

Você pode adicionar um evento Atributtes para o textbox:

txtEntrada.Atributtes.Add("onkeypress", "javascript:ValidaEntrada()");

Então você cria um JS da seguinte forma:

function ValidaEntrada() {
if (e.KeyCode == 13)
__doPostBack('Process','');
}

Então no Page_Load coloca:

if (Request.Form["__EVENTTARGET"] == "Process")
// Executa o processo

Seria algo do tipo...

Unknown disse...

Amigo vc teria como me dizer, como fazer pro campo que lê o codigo de barras ir ao banco de dados consultar e retornar o produto? Como em um sistema de mercado. Grato

Thiago Marçal disse...

Basta usar o evento no TextBox conforme o código abaixo:

private void txtNumero_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string entrada = txtNumero.Text;
// Consulta no banco de dados
DataSet ds = RetornaDS("SELECT * FROM Produtos WHERE codigo = " + entrada);
}
}

Isso é apenas uma sugestão do código bastando adequar à sua necessidade.

Pedro disse...

Vlw cara manja muito vc.. :D

Unknown disse...

Nossa Show de bola..
ta de parabéns Thiago Marçal!
Muito bons os seus artigos até aqui os melhores que já li e consegui compreender..

Geomar Canjundo disse...

Thiago, teria capturar os codigos de barras a partir de uma smart phone ou tablet?

Blogger disse...

Qual a marca de leitor de codigo de barras USB vc recomenda?

Marcio disse...

Olá Thiago, o que não está compreensível nesse post, é como o valor escaneado pelo aparelho, passa do buffer para o campo txtNumero.

Ele automaticamente efetua a ação de "colar" o valor escaneado depois do evento disparo pelo ENTER?

Poderia dar mais detalhar por gentileza?

Obrigado.

Thiago Marçal disse...

Marcio,
Quando o aplicativo está em execução, o cursor fica em foco no campo texto. Então qualquer entrada de texto via teclado será efetuada nesse campo. O leitor funciona como um teclado. O modelo que usei lê o conteúdo do código de barras e dá um ENTER no final. Então, se o código for "123", o leitor dará uma entrada "123ENTER". E no campo texto configuro um evento para ler o ENTER e assim pegar o conteúdo para manipulação. Veja se ficou claro e me avise qualquer coisa. Abs

Anônimo disse...

Olá Thiago, tudo bem? Artigo do leitor ficou muito bom! Para gerar um código de barra, em seguida armazenar no banco e imprimir, já deixando disponível para leitor. Seria algo muito complicado? Você pode dá algumas dicas. Obrigado Robson Nascimento

Thiago Marçal disse...

Robson, a princípio sua ideia é bem tranquila! Se precisar de ajuda, me fale.

Postar um comentário