Rotina para consistir um número de CPF.
//------------------------------------------------------------------------------
// Consistencia do campo CPF
// Se o campo informado estiver em branco eh considerado CPF valido,
// Em caso contrario o CPF somente eh valido se o digito de controle bater
//------------------------------------------------------------------------------
function ConsisteCPF(Texto : String) : Boolean;
var
Limpo : String;
Posic : array[1..11] of integer;
I, N, Dig1, Dig2, PriDig, SegDig : integer;
begin
Limpo := '';
N := 0;
for I := 1 to Length(Texto) do
begin
if Texto[I] in ['0'..'9'] then
begin
Limpo := Limpo + Texto[I];
Inc(N);
end;
end;
if N = 0 then
begin
ConsisteCPF := Trim(Texto) = '';
end
else
begin
while N < 11 do
begin
Limpo := '0' + Limpo;
Inc(N);
end;
for I := 1 to 11 do
Posic[I] := Ord(Limpo[I]) - $30;
{Calcula primeiro digito do CPF}
Dig1 := Posic[1]*10+Posic[2]*9+Posic[3]*8+Posic[4]*7+Posic[5]*6+Posic[6]*5+
Posic[7]*4+Posic[8]*3+Posic[9]*2;
Dig2 := Dig1 mod 11;
If (Dig2 = 0) or (Dig2 = 1) then
PriDig := 0
else
PriDig := 11 - Dig2;
{Calcula o segundo digito do CPF}
Dig1 := Posic[1]*11+Posic[2]*10+Posic[3]*9+Posic[4]*8+Posic[5]*7+Posic[6]*6+
Posic[7]*5+Posic[8]*4+Posic[9]*3+PriDig*2;
Dig2 := Dig1 mod 11;
If (Dig2 = 0) or (Dig2 = 1) then
SegDig := 0
else
SegDig := 11 - Dig2;
ConsisteCPF := (PriDig = Posic[10]) and (SegDig = Posic[11]);
end;
end;