hellxande Postado Setembro 12, 2006 Denunciar Share Postado Setembro 12, 2006 Boa noite a todos.Estou usando as Funções mencionadas abaixo, para validar os registro inseridos nos campos CPF e CNPJ, porém quando tento usar algum tipo de mascara falha a validação, alguém tem alguma sugestão.Segue abaixo as funções de Validação usadas.// Função de validação do CPFfunction TForm1.cpf(num:String): Boolean;varn1,n2,n3,n4,n5,n6,n7,n8,n9: integer;d1,d2: integer;digitado, calculado: string;beginn1:=StrToInt(num[1]);n2:=StrToInt(num[2]);n3:=StrToInt(num[3]);n4:=StrToInt(num[4]);n5:=StrToInt(num[5]);n6:=StrToInt(num[6]);n7:=StrToInt(num[7]);n8:=StrToInt(num[8]);n9:=StrToInt(num[9]);d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;d1:=11-(d1 mod 11);if d1 >= 10 then d1:=0;d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;d2:=11-(d2 mod 11);if d2>=10 then d2:=0;calculado:=inttostr(d1)+inttostr(d2);digitado:=num[10]+num[11];if calculado=digitado thencpf:=trueelsecpf:=false;end;=========================// Função de Validação do CNPJfunction TForm1.cnpj(num: string): boolean;varn1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;d1,d2: integer;digitado, calculado: string;beginn1:=StrToInt(num[1]);n2:=StrToInt(num[2]);n3:=StrToInt(num[3]);n4:=StrToInt(num[4]); n5:=StrToInt(num[5]);n6:=StrToInt(num[6]);n7:=StrToInt(num[7]);n8:=StrToInt(num[8]);n9:=StrToInt(num[9]);n10:=StrToInt(num[10]);n11:=StrToInt(num[11]);n12:=StrToInt(num[12]);d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;d1:=11-(d1 mod 11);if d1>=10 then d1:=0;d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6; d2:=11-(d2 mod 11);if d2>=10 then d2:=0;calculado:=inttostr(d1)+inttostr(d2);digitado:=num[13]+num[14];if calculado=digitado thencnpj:=trueelsecnpj:=false;end;===============================Qualquer ajuda é bem vinda, muito Obrigado.Atenciosamente Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Setembro 12, 2006 Denunciar Share Postado Setembro 12, 2006 Você precisa converter a String antes de entrar no cálculo do dígito.Uma das formas seria esta:var i,j:Byte; rb:array[1..11] of Byte; begin FillChar(rb[1], 11, 0); // para cpf, para cnpj defina rb e j com 14 j := 11; for i := Length(num) downto 1 do if (num[i] >= '0') and (num[i] <= '9') then begin rb[j] := StrToInt(num[i]); Dec(j); if j < 1 then Break; end; end;Após a conversão, utilize rb ao invés de num. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
hellxande
Boa noite a todos.
Estou usando as Funções mencionadas abaixo, para validar os registro inseridos nos campos CPF e CNPJ, porém quando tento usar algum tipo de mascara falha a validação, alguém tem alguma sugestão.
Segue abaixo as funções de Validação usadas.
// Função de validação do CPF
function TForm1.cpf(num:String): Boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[3]);
n4:=StrToInt(num[4]);
n5:=StrToInt(num[5]);
n6:=StrToInt(num[6]);
n7:=StrToInt(num[7]);
n8:=StrToInt(num[8]);
n9:=StrToInt(num[9]);
d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1:=11-(d1 mod 11);
if d1 >= 10 then d1:=0;
d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[10]+num[11];
if calculado=digitado then
cpf:=true
else
cpf:=false;
end;
=========================
// Função de Validação do CNPJ
function TForm1.cnpj(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[3]);
n4:=StrToInt(num[4]);
n5:=StrToInt(num[5]);
n6:=StrToInt(num[6]);
n7:=StrToInt(num[7]);
n8:=StrToInt(num[8]);
n9:=StrToInt(num[9]);
n10:=StrToInt(num[10]);
n11:=StrToInt(num[11]);
n12:=StrToInt(num[12]);
d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6; d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[13]+num[14];
if calculado=digitado then
cnpj:=true
else
cnpj:=false;
end;
===============================
Qualquer ajuda é bem vinda, muito Obrigado.
Atenciosamente
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.