Fórum Digito verificar de Codigo de barras de Boletos #192046

31/10/2003

0

PessoALL,

alguem saberia me falar como calculo o digito verificador do Codigo de Barras de um boleto bancário ????

Ja procurei nos manuais do FEBRABAN e nao encontro esse calculo ...

Ou senao algum site q eu possa pesquisar.

Obr pela ajuda

Marcel


Scandolara

Scandolara

Responder

Posts

31/10/2003

Carnette

Leia esta UNIT e faça as adaptações necessárias

O módulo10BB é o que gera o digito do Banco do Brasil

unit DVs; { DVs.Pas - Copyleft (1997) - Ivan C Cruz. ivancruz@centroin.com.br www.forumbr.com Você pode distribuir, utilizar e alterar livremente estas rotinas desde que mantenha este comentário que identifica o autor original. } interface function DvModulo11 ( str: String ): Char; function DvModulo10BB ( str1: String ): Char; function DvModulo10 ( str: String ): Char; function DvCGC ( str: String ): String; function DvCPF ( str: String ): String; function ValidaCGC ( str: String ): Boolean; function ValidaCPF ( str: String ): Boolean; implementation { chInt - Converte um caracter numérico para o valor inteiro correspondente. } function chInt ( ch: Char ): ShortInt; begin Result := Ord ( ch ) - Ord ( ´0´ ); end; { intCh = Converte um valor inteiro (de 0 a 9) para o caracter numérico correspondente. } function intCh ( int: ShortInt ): Char; begin Result := Chr ( int + Ord ( ´0´ ) ); end; { DvModulo11 - Retorna 1 dv calculado pelo método do modulo 11 padrão. } function DvModulo11 ( str: String ): Char; var soma, fator, i: Integer; begin soma := 0; fator := 2; for i := Length ( str ) downto 1 do begin soma := soma + chInt ( str[i] ) * fator; Inc ( fator ); if fator = 10 then fator := 2; end; soma := 11 - ( soma mod 11 ); if soma >= 10 then Result := ´1´ else Result := intCh ( soma ); end; { dvModulo11ParaCPF - Retorna 1 dv calculado pelo método do modulo 11 ligeiramente alterado para o CPF. } function dvModulo11ParaCPF ( str: String ): Char; var soma, fator, i: Integer; begin soma := 0; fator := 2; for i := Length ( str ) downto 1 do begin soma := soma + chInt ( str[i] ) * fator; Inc ( fator ); end; soma := 11 - ( soma mod 11 ); if soma >= 10 then //Aqui voce trata o valor vc escolha no que X ou em outra coisa qualquer Result := ´0´ else Result := intCh ( soma ); end; { DvModulo10 - Retorna 1 dv calculado pelo método do modulo 10 padrão. } function DvModulo10BB ( str1: String ): Char; var soma, fator, numero, numero2, i: Integer; S :String[2]; begin soma := 0; fator := 2; for i := Length ( str1 ) downto 1 do begin numero := chInt ( str1[i] ) * fator; if numero > 9 then begin Str(numero,S); numero := chInt(s[1]) + chInt(s[2]); end; soma := soma + numero; Dec ( fator ); if fator = 0 then fator := 2; end; soma := Trunc((Int(Soma/10)*10)+10) - ( soma ); if soma >= 10 then Result := ´0´ else Result := intCh ( soma ); end; { DvModulo10 - Retorna 1 dv calculado pelo método do modulo 10 padrão. } function DvModulo10 ( str: String ): Char; var soma, fator, i: Integer; begin soma := 0; fator := 2; for i := Length ( str ) downto 1 do begin soma := soma + chInt ( str[i] ) * fator; Dec ( fator ); if fator = 0 then fator := 2; end; soma := 10 - ( soma div 11 ); if soma >= 10 then Result := ´0´ else Result := intCh ( soma ); end; { DvCGC - Retorna os dois dvs de um CGC, dado o CGC sem os dvs em forma de string (12 caracteres numéricos). } function DvCGC ( str: String ): String; var dv1: Char; begin dv1 := DvModulo11 ( str ); Result := dv1 + DvModulo11 ( str + dv1 ); end; { DvCPF - Retorna os dois dvs de um CPF, dado o CPF sem os dvs em forma de string (9 caracteres numéricos). } function DvCPF ( str: String ): String; var dv1: Char; begin dv1 := dvModulo11ParaCPF ( str ); Result := dv1 + dvModulo11ParaCPF ( str + dv1 ); end; { ValidaCGC - Retorna true se o CGC dado é valido. O CGC deve ser um string de 14 caracteres numéricos. } function ValidaCGC ( str: String ): Boolean; begin Result := Copy ( str, 13, 2 ) = DvCGC ( Copy ( str, 1, 12 ) ); end; { ValidaCPF - Retorna true se o CPF dado é valido. O CPF deve ser um string de 11 caracteres numéricos. } function ValidaCPF ( str: String ): Boolean; begin Result := Copy ( str, 10, 2 ) = DvCPF ( Copy ( str, 1, 9 ) ); end; end.



Responder

Gostei + 0

31/10/2003

Gbastos

Lembrando q os 3 DVs da linha digitavel sao calculados com módulo 10 e o DV geral do código de barras é calculado com módulo 11.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar