Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Com Mascara Em Validação De Cpf E Cnpj


hellxande

Pergunta

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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...