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 respostas em “Ler c??digo de barras atrav??s de um leitor ??ptico com ASP.NET”
Ser?? necess??rio instalar alguma dll do leitor de c??digo de barras para que o asp.net identifique o leitor ?
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.
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 + nn.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,
O nn 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 nn 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;
}
Legal. O codigo de barras ?? do DVD Amigos Por Siempre. Massa
Thiago!Blz?
Otimo seu Post, estou trabalhando com WebForms. Sabe me dizer como fazer esquema KeyDown via webForms?
Obrigad??o!Abra??o
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…
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
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.
Vlw cara manja muito vc.. 😀
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..
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.
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
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
Robson, a princ??pio sua ideia ?? bem tranquila! Se precisar de ajuda, me fale.
Qual a marca de leitor de codigo de barras USB vc recomenda?
Thiago, teria capturar os codigos de barras a partir de uma smart phone ou tablet?