[firebase-br] RES: OFF-TOPPIC - modulo11 Banco do Brasil
Auriston (IG)
auristonlopes em ig.com.br
Ter Set 10 17:29:17 -03 2013
function Modulo11(Valor: String; Base: Integer = 9; Resto : boolean = false)
: 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
Soma : integer;
Contador, Peso, Digito : integer;
begin
Soma := 0;
Peso := 2;
for Contador := Length(Valor) downto 1 do
begin
Soma := Soma + (StrToInt(Valor[Contador]) * Peso);
if Peso < Base then
Peso := Peso + 1
else
Peso := 2;
end;
if Resto then
Result := IntToStr(Soma mod 11)
else
begin
Digito := 11 - (Soma mod 11);
if (Digito > 9) then
Digito := 0;
Result := IntToStr(Digito);
end;
end;
-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Henrique Ribeiro
Enviada em: terça-feira, 10 de setembro de 2013 16:31
Para: FireBase
Assunto: [firebase-br] OFF-TOPPIC - modulo11 Banco do Brasil
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
Mais detalhes sobre a lista de discussão lista