Renanbg 1 Denunciar post Postado Fevereiro 14, 2012 Tenho um leitor de codigos de barras de boletos aqui e gostaria de que ao passar o boleto por ele, um edit recebesse o valor do boleto e o outro recebesse a data de vencimento, assim como acontece quando se paga uma conta on-line. Alguem sabe como fazer ou pode me indicar um caminho? Compartilhar este post Link para o post Compartilhar em outros sites
Angelo Bassay 0 Denunciar post Postado Fevereiro 15, 2012 Segundo o padrão FEBRABAN, o código de barras do boleto é formado por 44 caracteres, a saber: - Número do banco (3 dígitos) - Código da moeda (1 dígito = "9") - Dígito verificador (1 dígito) - Fator de vencimento (4 dígitos) - corresponde a quantidade de dias após a data base de 07/10/1997. - Valor do título (10 dígitos) - Campo livre (25 dígitos) - cada banco implementa um algoritmo nesta parte Então para extrair o vencimento e valor: function ExtrairDataVencimento(const CodigoBarras: String): TDateTime; begin Result := StrToDate('07/10/1997') + StrToInt(Copy(CodigoBarras, 6, 4)); end; function ExtrairValor(const CodigoBarras: String): Currency; begin Result := StrToCurr(Copy(CodigoBarras, 10, 10)) / 100; end; PS: Isso vale para títulos de cobrança. Contas de água, luz e telefone, por exemplo, usam outro algoritmo. PS2: Boletos podem não ter valor ou vencimento, nesse caso estarão preenchidos com 0. Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Fevereiro 20, 2012 Olá Angelo, Obrigado pela ajuda, funcionou perfeitamente. Agora mais um detalhe...suponhamos que o leitor não funcione ou o codigo de barras esteja danificado. Tem como mudar essa função pra pegar os dados da linha digitavel? Compartilhar este post Link para o post Compartilhar em outros sites
Angelo Bassay 0 Denunciar post Postado Fevereiro 20, 2012 Sim. Os últimos 14 caracteres da linha digitável são o fator de vencimento e o valor do título, na sequencia. Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Fevereiro 21, 2012 Certo. a linha digitavel é essa: 04192101330161206000200086740842752460000249352 Valor: 2493,52 Vencimento: 17/02/2012 fiz assim: function ExtrairDataVencimento(const CodigoBarras: String): TDateTime; begin Result := StrToDate('07/10/1997') + StrToInt(Copy(CodigoBarras, 34, 4)); end; function ExtrairValor(const CodigoBarras: String): Currency; begin Result := StrToCurr(Copy(CodigoBarras, 38, 10)) / 100; end; Está correto? Compartilhar este post Link para o post Compartilhar em outros sites