Validação

Delphi

04/02/2004

Olá galera,

Precisando mais uma vez de vcs. Meu problema é o seguinte:

Preciso criar um programa para emissão de comprovante de pagamento de contas de água, luz e telefone, onde a leitura é feita pelo código de barras das faturas. Geralmente as faturas apresentam problemas com código de barras, não sendo possível fazer a leitura pelo leitor optico, tendo que ser digitado manualmente.

Gostaria de criar uma validação para verificar se o código de barras foi digitado corretamente verificando pelo dígito verificador para evitar erros na captura.

Ex: 84600000000-6 47590018040-1 11906371382-8 41397010312-8

Tenho que testar cada dígito para verificar se o código digitado está correto.


Josimar

Josimar

Curtidas 0

Respostas

Markk

Markk

04/02/2004

Josimar, também estou desenvolvendo um carnê de pagamento e já descobri como imprimir o código de barra.
O problema para calcular o DV é quais posições do código vão montar a seqüência para o DV.
Normalmente o código terá 43 posições + o DV.
Existe uma padronização feita pela febraban - cnb240 ou cnb400 -disponível na internet.
Outra coisa é como é calculado o dígito, se é módulo 11 ou módulo 10 e suas variações.
Modulo 11 (pode se base 9 ou 7)
Base 9.
Você multiplica as posições da direita para a esquerda pelo fator correspondente onde o menor valor é 2 e o maior é 9. Soma os resultados e divide a soma por 11. Subtrai de 11 o resto da divisão.
se o resultado for maior que 9 o DV =1 senão é o resultado.

Ex:
84600000000-6
43298765432

soma := 2x0+3x0+...+8x4
soma := 32+12+12
soma = 56

56 / 11 = 5
resto = 1
11 - 1 = 10
DV = 1

DV=(11 - (soma mod 11))

Esse exemplo é apenas para explicação, o módulo 11, assim como módulo 10 sofre algumas variações e é preciso verificar com o banco que tem o convênio com a companhia de agua e luz qual é o que ele utitliza.

Espero ter ajudado.


GOSTEI 0
Markk

Markk

04/02/2004

Josimar eu descobri a forma do cálculo, é utilizando o módulo 10 alternado. Você multiplica as posições do número por 2,1,2,1, começando da direita para esquerda. Se o resultado da multiplicação for maior que 9 você soma os digitos do resultado.
Ex:
84600000000-6
21212121212

(16)+4+(12)=>
7 +4+3=14

14/10=1
Resto=4

10 - 4=(6) => digito verificador.

47590018040-1
21212121212

8+7+(10)+9+0+0+2+8+0+4+0=
8+7+1+9+0+0+2+8+0+4+0=39
39/10=3
resto=9

10-9=(1) Dv.


Se o resto for 10 o DV=0.

Verifique para ver se te atende essa forma.


GOSTEI 0
POSTAR