[firebase-br] OFF-TOPPIC - modulo11 Banco do Brasil

Fernando Correa fjcnando em ig.com.br
Qua Set 11 08:00:34 -03 2013


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



Mais detalhes sobre a lista de discussão lista