Calcular dígito verificador módulo 11
19/02/2003
0
Olá amigos!
Qual a função para calcular o DV de um número contido em um EDIT, pelo módulo 11?
Obs.: Se o resultado da divisão for 10, o DV deverá ser igual a ´X´.
Desde já agradeço.
Qual a função para calcular o DV de um número contido em um EDIT, pelo módulo 11?
Obs.: Se o resultado da divisão for 10, o DV deverá ser igual a ´X´.
Desde já agradeço.
Vega.x
Curtir tópico
+ 0
Responder
Posts
19/02/2003
Anonymous
Olá amigos!
Qual a função para calcular o DV de um número contido em um EDIT, pelo módulo 11?
Obs.: Se o resultado da divisão for 10, o DV deverá ser igual a ´X´.
Desde já agradeço.
Caro,
Ajuste a função para retornar string ao invés de inteiro e X no lugar de 0. Existem algumas variações desse algoritmo, esta é a mais usual.
Atenciosamente,
[]´s
Aroldo Zanela
Function Mod11( iNumero: Integer ) : Integer; var sCadeia : String; iX : Integer; iY : Integer; iValor : Integer; iDigito : Integer; sPosicao : String; iPosicao : Integer; Begin iValor := 0; sCadeia := StrZero( iNumero, 16 ); For iY := 2 DownTo 1 do Begin For iX := 8 DownTo 1 do Begin sPosicao := Copy( sCadeia, ( 17 - ( iX + ( 8 * ( iY - 1 ) ) ) ), 1 ); iPosicao := StrToInt( sPosicao ); iValor := iValor + ( iPosicao * ( iX + 1 ) ) End; End; iDigito := ( ( iValor * 10 ) mod 11 ); If iDigito >= 10 Then iDigito := 0; Result := StrToInt(StrZero( iDigito, 1 )); End;
Responder
19/02/2003
Carnette
UNIT com funções para calcular digito veirificador
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.
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
Clique aqui para fazer login e interagir na Comunidade :)