[firebase-br] OFF-TOPPIC - modulo11 Banco do Brasil
Henrique Ribeiro
kikeribeiro em gmail.com
Qua Set 11 08:54:31 -03 2013
Bom dia pessoal,
Obrigado pelo apoio. Obrigado mesmo.
Fernando,
Executei a tua função e percebi que ela não "exclui" a posição "5" como
indica o manual do BB:
b) para calcular o D.V. considerar 43 posições do Código de Barras sendo da
posição 1 a 4 e da posição 6 a 44;
c) multiplicar cada algarismo que compõe o número pelo seu respectivo
multiplicador (peso), iniciando-se pela 44a posição e saltando a 5a posição;
Será que pode comprometer o resultado? É que falta somente este DV geral
para homologar minha rotina de bloquetos com eles (BB).
Muito obrigado a você e ao Auriston pela ajuda.
Att,
Henrique
Em 11 de setembro de 2013 08:00, Fernando Correa <fjcnando em ig.com.br>escreveu:
> Henrique,
>
> Segue uma rotina que tenha há mais de 12 anos, veja se poderá te ajudar:
>
> Declaração:
>
>
> function Modulo11(Numero: string): string;
>
>
> function Modulo11(Numero: string): string;
> var
> i, j, k: Integer;
> Soma: Integer;
> Digito: Integer;
> begin
> Numero := Trim(Numero);
> for j := 1 to 1 do
> begin
> k := 2;
> Soma := 0;
> for i := Length(Numero) downto 1 do
> begin
> Soma := Soma + (Ord(Numero[i]) - Ord('0')) * k;
> Inc(k);
> if (k > 9) then
> k := 2; //2
> end;
> Digito := 11 - Soma mod 11;
> if Digito >= 10 then
> Digito := 0;
> Result := Result + Chr(Digito + Ord('0'));
> end;
> end;
>
>
> Basta passar o que você quer para a função que o retorno será o digito
> conforme módulo de calculo.
>
> Uso para: BB, Banestes, HSBC, CEF, Real, Itau ...
>
>
>
> Espero ter ajudado.
>
> Atenciosamente
> Fernando Correa
>
>
> Em 10 de setembro de 2013 16:30, Henrique Ribeiro
> <kikeribeiro em gmail.com>escreveu:
>
> > Boa tarde colegas,
> >
> > Estou com certa dificuldade em ajustar o módulo11 em Delphi da unit
> > gbCobranca.pas.
> >
> > Encaminho a função e agradeço desde já qualquer ajuda que aparecer.
> >
> > Função:
> >
> > function Modulo11BB(Valor: string; Base: Integer = 9): string;
> > {
> > Rotina muito usada para calcular dígitos verificadores
> > Pega-se cada um dos dígitos contidos no parâmetro VALOR, da direita
> para
> > a
> > esquerda e multiplica-se pela seqüência de pesos 2, 3, 4 ... até BASE.
> > Por exemplo: se a base for 9, os pesos serão
> 2,3,4,5,6,7,8,9,2,3,4,5...
> > Se a base for 7, os pesos serão 2,3,4,5,6,7,2,3,4...
> > Soma-se cada um dos subprodutos.
> > Divide-se a soma por 11.
> > Faz-se a operação 11-Resto da divisão e devolve-se o resultado dessa
> > operação
> > como resultado da função Modulo11.
> > Obs.: Caso o resultado seja maior que 9, deverá ser substituído por 0
> > (ZERO).
> > }
> > var
> > iSoma: Integer;
> > iContador: Integer;
> >
> > iFator: Integer;
> > begin
> > iFator := Base;
> > iSoma := 0;
> >
> > for iContador := Length(Valor) downto 1 do
> > begin
> > if iContador <> 5 then
> > begin
> > iSoma := iSoma + (StrToInt(Valor[iContador]) * iFator);
> >
> > Dec(iFator);
> >
> > if iFator = 1 then
> > iFator := Base;
> > end;
> > end;
> >
> > Result := IntToStr(iSoma mod 11);
> > end;
> >
> >
> > Orientação do Manual Bloquetos ago_2011 do Banco do Brasil:
> >
> > ANEXO 10
> > CÁLCULO DO DÍGITO VERIFICADOR (DV) DO CÓDIGO DE BARRAS (MÓDULO 11)
> > Por definição do BACEN, na 5ª posição do código de barras, deve ser
> > indicado, obrigatoriamente, o “dígito verificador”(DV), do Código de
> > Barras, calculado pelo
> > módulo 11, conforme segue:
> > a) o código de barras possui 44 (quarenta e quatro) posições, incluindo o
> > D.V.;
> > b) para calcular o D.V. considerar 43 posições do Código de Barras sendo
> da
> > posição 1 a 4 e da posição 6 a 44;
> > c) multiplicar cada algarismo que compõe o número pelo seu respectivo
> > multiplicador (peso), iniciando-se pela 44a posição e saltando a 5a
> > posição;
> > d) os multiplicadores (pesos) variam de 2 a 9;
> > e) o primeiro dígito da direita para a esquerda deverá ser multiplicado
> por
> > 2, o segundo por 3 e assim sucessivamente;
> > f) os resultados das multiplicações devem ser somados:
> > Exemplo:(6 X 2) + (3 X 1) + (4 X 8) + ...+(4 X 0) = 712;
> > g) o total da soma deverá ser dividido por 11:
> > Exemplo: 712/11 = 64. Resto igual a 8;
> > h) o resto da divisão deverá ser subtraído de 11:
> > Exemplo: 11 - 8 = 3, Portando “3” é o Dígito verificador
> > i) se o resultado da subtração for:
> > I - igual a 0.....................D.V. igual a 1
> > II - igual a 10....................D.V. igual a 1
> > III - igual a 11....................D.V. igual a 1
> > IV - diferente de 10 e 11..........D.V. será o próprio dígito, no caso do
> > exemplo “3”
> > OBS: EM NENHUMA HIPOTESE PODERÁ SER UTILIZADO O DÍGITO "0"(/ZERO) NA
> QUINTA
> > POSIÇÃO DO CÓDIGO DE BARRAS.
> > j) o resultado deste cálculo deverá ser incluído na 5a posição do código
> de
> > barras.
> >
> > Obrigado para todos e sucesso na jornada!
> > Henrique
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
>
>
> --
> Atenciosamente
> Fernando Correa
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista