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

Henrique Ribeiro kikeribeiro em gmail.com
Ter Set 10 16:30:50 -03 2013


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



Mais detalhes sobre a lista de discussão lista