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

(Resolvido) Validar Cpf,cnpj,rg,


Guest Murilo Carlos Cardoso

Pergunta

Guest Murilo Carlos Cardoso

Bom, tenho um DBEdt pedindo CPF OU CGC e um DBComboBox para assinalar se é físico ou jurídico. Gostaria de saber como faço para poder fazer a validação desse campo funcionar, tendo em vista que devo ter uma tomada de decisão caso o cliente seja físico é para validar CPF e se ele for jurídico e para validar CNPJ.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá,

ae vai o código:

implementation

{$R *.DFM}

function ApenasNumerosStr(pStr:String): String;
Var
I: Integer;
begin
  Result := '';
  For I := 1 To Length(pStr) do
   If pStr[I] In ['1','2','3','4','5','6','7','8','9','0'] Then
     Result := Result + pStr[I];
end;


function IIf(pCond:Boolean;pTrue,pFalse:Variant): Variant;
begin
  If pCond Then Result := pTrue
  else Result := pFalse;
end;

function CalculaCnpjCpf(Numero : String) : Boolean;
Var
i,d,b,
Digito : Byte;
Soma : Integer;
CNPJ : Boolean;
DgPass,
DgCalc : String;
begin
  Result := False;
  Numero := ApenasNumerosStr(Numero);
  // Caso o número não seja 11 (CPF) ou 14 (CNPJ), aborta
  Case Length(Numero) of
    11: CNPJ := False;
    14: CNPJ := True;
  else Exit;
  end;
  // Separa o número do digito
  DgCalc := '';
  DgPass := Copy(Numero,Length(Numero)-1,2);
  Numero := Copy(Numero,1,Length(Numero)-2);
  // Calcula o digito 1 e 2
  For d := 1 to 2 do begin
    B := IIF(D=1,2,3); // BYTE
    SOMA := IIF(D=1,0,STRTOINTDEF(DGCALC,0)*2);
    for i := Length(Numero) downto 1 do begin
      Soma := Soma + (Ord(Numero[I])-Ord('0'))*b;
      Inc(b);
      If (b > 9) And CNPJ Then
        b := 2;
    end;
   Digito := 11 - Soma mod 11;
   If Digito >= 10 then
     Digito := 0;
   DgCalc := DgCalc + Chr(Digito + Ord('0'));
  end;
  Result := DgCalc = DgPass;
end;


procedure TForm1.Button1Click(Sender: TObject);
var msg : string;
begin
    if ComboBox.text = 'CPF' then msg := 'CPF'
    else msg := 'CNPJ';

    if CalculaCnpjCpf(DBEdit1.text) then 
       ShowMessage(msg+' Correto.')
    else ShowMessage(msg+' Incorreto.');
end;

É tipo assim. Ok!? wink.gif

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Ola pessoal!

Estou tendo o mesmo problema do amigo. O caso é que estou tentando realizar a validação do CNPJ e CPF no mesmo DBEdit, mas devido a minha pouca experiência em programação estou tendo muita dificuldade. Algum poderia me auxiliar?

Tenho um cadastro de clientes com um campo DBComboBox com a opção de mostrar se é físico ou jurídico e um DBEdt onde será digitado CPF OU CNPJ. Como faço para poder fazer a validação desse campo DBEdit funcionar? Sendo que, quando a opção for Pessoa Física o campo DBcombobox valida CPF e quando for CNPJ valida Pessoa Juridica.

Link para o comentário
Compartilhar em outros sites

  • 0

exemplo:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    Label1: TLabel;
    RadioGroup1: TRadioGroup;
    MaskEdit2: TMaskEdit;
    Label2: TLabel;
    function cpf(num: string): boolean;
    function ValidaCNPJ(I:string): Boolean;
    procedure RadioGroup1Click(Sender: TObject);
    procedure MaskEdit1Exit(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.cpf(num: string): boolean;
var
   n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
   d1,d2: integer;
   digitado, calculado: string;
begin
  if MaskEdit1.text = '' then exit;
  if MaskEdit1.text <> '   .   .   -  ' then
  begin
  n1:=StrToInt(num[1]);
  n2:=StrToInt(num[2]);
  n3:=StrToInt(num[3]);
  n4:=StrToInt(num[5]);
  n5:=StrToInt(num[6]);
  n6:=StrToInt(num[7]);
  n7:=StrToInt(num[9]);
  n8:=StrToInt(num[10]);
  n9:=StrToInt(num[11]);
  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[13]+num[14];
  if calculado=digitado then
    cpf:=true
  else
    cpf:=false;
  end;
end;

function CalculaCnpjCpf(Numero : String) : String;
var
 i,j,k, Soma, Digito : Integer;
 CNPJ : Boolean;
begin
 Result := Numero;
 case Length(Numero) of
 9:
 CNPJ := False;
 12:
 CNPJ := True;
 else
 Exit;
 end;
 for j := 1 to 2 do
 begin
 k := 2;
 Soma := 0;
 for i := Length(Result) downto 1 do
 begin
 Soma := Soma + (Ord(Result[i])-Ord('0'))*k;
 Inc(k);
 if (k > 9) and CNPJ then
 k := 2;
 end;
 Digito := 11 - Soma mod 11;
 if Digito >= 10 then
 Digito := 0;
 Result := Result + Chr(Digito + Ord('0'));
 end;
end;


function TForm1.ValidaCNPJ(I:string): Boolean;
var
   cnpj: array[1..14] of integer;
   apoio: array[0..13] of integer;
   f: integer;//para uso no for
   total: integer;//para totalização dos valores
   D1: integer;//primeiro dígito calculado
   D2: integer;//segundo dígito calculado
begin
//Primeiro teste: o número de algarismos
if (Length(I)<>14) then result:=false
else
  begin
  //Antes do teste propriamente dito temos que montar a matriz com os
  //os algarismos do CNPJ e depois uma matriz apoio) que terá os números
  //que ajudarão a verificar so dígitos verificadores
  for f := 1 to 14 do
      begin
       cnpj[f]:=0;
       apoio[f-1]:=0;
      end;
  //Monta matriz cnpj
  for f := 1 to 14 do
      begin
       cnpj[f]:=strtoint(I[f]);
      end;
  end;
  //Monta matriz de apoio
  apoio[0]:=6;//só será usada no cálculo do segundo dígito verificador
  apoio[1]:=5;
  apoio[2]:=4;
  apoio[3]:=3;
  apoio[4]:=2;
  apoio[5]:=9;
  apoio[6]:=8;
  apoio[7]:=7;
  apoio[8]:=6;
  apoio[9]:=5;
  apoio[10]:=4;
  apoio[11]:=3;
  apoio[12]:=2;
  //Começa cálculo do primeiro dígito verificador
  total:=0;//variável que conterá a soma da operação com os números
  for f := 1 to 12 do
        begin
          total:=total+(cnpj[f]*apoio[f]);
        end;
  D1 := total mod 11;
      if (D1<2) then D1:=0 else D1:=11-D1;
      if (D1<>cnpj[13]) then
        begin
          //Primeiro dígito verificador não confere
          Result:=false;
        end else
                begin
                 //Entrou aqui, então o primeiro dígito confere!
                 total:=0;
                 for f := 0 to 12 do
                        begin
                           total:=total+(cnpj[f+1]*apoio[f]);
                        end;
                 D2 :=total mod 11;
                 if (D2<2) then D2:=0 else D2:=11-D2;
                 if (D2<>cnpj[14]) then
                        begin
                           //Segunod digito verificador não confere
                           Result:=false;
                        end else Result:=true;
                 end;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  MaskEdit1.Text := '';
  MaskEdit2.Text := '';

  if RadioGroup1.Items.Strings[RadioGroup1.ItemIndex] = 'Física' then
     begin
       Label1.Caption := 'CPF'; // seria o seu label onde o caption é c_cnpj
       Label2.Caption := 'RG';
       MaskEdit1.EditMask := '000.000.000-00';
       MaskEdit2.EditMask := '##############';
     end;

  if RadioGroup1.Items.Strings[RadioGroup1.ItemIndex] = 'Juridica' then
     begin
       Label1.Caption := 'CNPJ'; // seria o seu label onde o caption é c_cnpj
       Label2.Caption := 'INSCR.EST';
       MaskEdit1.EditMask := '000.000.000/0000-00';
       MaskEdit2.EditMask := '000.000.000-000';
     end;
end;


procedure TForm1.MaskEdit1Exit(Sender: TObject);
VAR S, s2 : boolean;  s1 : string;
begin
  try
  if Label1.Caption = 'CPF' then
    begin
      if MaskEdit1.text = '' then exit;
      s := cpf(MaskEdit1.text);

      if s = true  then
        //showmessage('CIC/CPF Valido')
      else
        begin
          showmessage('CIC/CPF Inválido');
          MaskEdit1.Text := '000.000.000-00';
        end;
    end;
  except
      MaskEdit2.Text := '000.000.000-00';
  end;

  try
  if Label1.Caption = 'CNPJ' then
    begin
      if MaskEdit1.text = '' then exit;

      s1 := MaskEdit1.Text;

      while Pos('.', S1) > 0 do
         delete(s1,Pos('.', S1),1);
      while Pos('/', S1) > 0 do
         delete(s1,Pos('/', S1),1);
      while Pos('-', S1) > 0 do
         delete(s1,Pos('-', S1),1);

      if Pos('0', S1) = 1 then
         delete(s1,Pos('0', S1),1);

      s2 := ValidaCNPJ(s1);

      if s2 = true  then
        //showmessage('CNPJ Valido')
      else
        begin
          showmessage('CNPJ Inválido');
          MaskEdit1.Text := '000.000.000/0000-00';
        end;
    end;
  except
      MaskEdit1.Text := '000.000.000/0000-00';
  end;

end;

end.

Obs: Faça as modificações necessarias para o seu uso.

Ou se preferir veja esses links

https://www.google.com/search?q=validar+cpf++delphi&ie=utf-8&oe=utf-8&client=firefox-b

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
22 horas atrás, Jhonas disse:

exemplo:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    Label1: TLabel;
    RadioGroup1: TRadioGroup;
    MaskEdit2: TMaskEdit;
    Label2: TLabel;
    function cpf(num: string): boolean;
    function ValidaCNPJ(I:string): Boolean;
    procedure RadioGroup1Click(Sender: TObject);
    procedure MaskEdit1Exit(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.cpf(num: string): boolean;
var
   n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
   d1,d2: integer;
   digitado, calculado: string;
begin
  if MaskEdit1.text = '' then exit;
  if MaskEdit1.text <> '   .   .   -  ' then
  begin
  n1:=StrToInt(num[1]);
  n2:=StrToInt(num[2]);
  n3:=StrToInt(num[3]);
  n4:=StrToInt(num[5]);
  n5:=StrToInt(num[6]);
  n6:=StrToInt(num[7]);
  n7:=StrToInt(num[9]);
  n8:=StrToInt(num[10]);
  n9:=StrToInt(num[11]);
  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[13]+num[14];
  if calculado=digitado then
    cpf:=true
  else
    cpf:=false;
  end;
end;

function CalculaCnpjCpf(Numero : String) : String;
var
 i,j,k, Soma, Digito : Integer;
 CNPJ : Boolean;
begin
 Result := Numero;
 case Length(Numero) of
 9:
 CNPJ := False;
 12:
 CNPJ := True;
 else
 Exit;
 end;
 for j := 1 to 2 do
 begin
 k := 2;
 Soma := 0;
 for i := Length(Result) downto 1 do
 begin
 Soma := Soma + (Ord(Result[i])-Ord('0'))*k;
 Inc(k);
 if (k > 9) and CNPJ then
 k := 2;
 end;
 Digito := 11 - Soma mod 11;
 if Digito >= 10 then
 Digito := 0;
 Result := Result + Chr(Digito + Ord('0'));
 end;
end;


function TForm1.ValidaCNPJ(I:string): Boolean;
var
   cnpj: array[1..14] of integer;
   apoio: array[0..13] of integer;
   f: integer;//para uso no for
   total: integer;//para totalização dos valores
   D1: integer;//primeiro dígito calculado
   D2: integer;//segundo dígito calculado
begin
//Primeiro teste: o número de algarismos
if (Length(I)<>14) then result:=false
else
  begin
  //Antes do teste propriamente dito temos que montar a matriz com os
  //os algarismos do CNPJ e depois uma matriz apoio) que terá os números
  //que ajudarão a verificar so dígitos verificadores
  for f := 1 to 14 do
      begin
       cnpj[f]:=0;
       apoio[f-1]:=0;
      end;
  //Monta matriz cnpj
  for f := 1 to 14 do
      begin
       cnpj[f]:=strtoint(I[f]);
      end;
  end;
  //Monta matriz de apoio
  apoio[0]:=6;//só será usada no cálculo do segundo dígito verificador
  apoio[1]:=5;
  apoio[2]:=4;
  apoio[3]:=3;
  apoio[4]:=2;
  apoio[5]:=9;
  apoio[6]:=8;
  apoio[7]:=7;
  apoio[8]:=6;
  apoio[9]:=5;
  apoio[10]:=4;
  apoio[11]:=3;
  apoio[12]:=2;
  //Começa cálculo do primeiro dígito verificador
  total:=0;//variável que conterá a soma da operação com os números
  for f := 1 to 12 do
        begin
          total:=total+(cnpj[f]*apoio[f]);
        end;
  D1 := total mod 11;
      if (D1<2) then D1:=0 else D1:=11-D1;
      if (D1<>cnpj[13]) then
        begin
          //Primeiro dígito verificador não confere
          Result:=false;
        end else
                begin
                 //Entrou aqui, então o primeiro dígito confere!
                 total:=0;
                 for f := 0 to 12 do
                        begin
                           total:=total+(cnpj[f+1]*apoio[f]);
                        end;
                 D2 :=total mod 11;
                 if (D2<2) then D2:=0 else D2:=11-D2;
                 if (D2<>cnpj[14]) then
                        begin
                           //Segunod digito verificador não confere
                           Result:=false;
                        end else Result:=true;
                 end;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  MaskEdit1.Text := '';
  MaskEdit2.Text := '';

  if RadioGroup1.Items.Strings[RadioGroup1.ItemIndex] = 'Física' then
     begin
       Label1.Caption := 'CPF'; // seria o seu label onde o caption é c_cnpj
       Label2.Caption := 'RG';
       MaskEdit1.EditMask := '000.000.000-00';
       MaskEdit2.EditMask := '##############';
     end;

  if RadioGroup1.Items.Strings[RadioGroup1.ItemIndex] = 'Juridica' then
     begin
       Label1.Caption := 'CNPJ'; // seria o seu label onde o caption é c_cnpj
       Label2.Caption := 'INSCR.EST';
       MaskEdit1.EditMask := '000.000.000/0000-00';
       MaskEdit2.EditMask := '000.000.000-000';
     end;
end;


procedure TForm1.MaskEdit1Exit(Sender: TObject);
VAR S, s2 : boolean;  s1 : string;
begin
  try
  if Label1.Caption = 'CPF' then
    begin
      if MaskEdit1.text = '' then exit;
      s := cpf(MaskEdit1.text);

      if s = true  then
        //showmessage('CIC/CPF Valido')
      else
        begin
          showmessage('CIC/CPF Inválido');
          MaskEdit1.Text := '000.000.000-00';
        end;
    end;
  except
      MaskEdit2.Text := '000.000.000-00';
  end;

  try
  if Label1.Caption = 'CNPJ' then
    begin
      if MaskEdit1.text = '' then exit;

      s1 := MaskEdit1.Text;

      while Pos('.', S1) > 0 do
         delete(s1,Pos('.', S1),1);
      while Pos('/', S1) > 0 do
         delete(s1,Pos('/', S1),1);
      while Pos('-', S1) > 0 do
         delete(s1,Pos('-', S1),1);

      if Pos('0', S1) = 1 then
         delete(s1,Pos('0', S1),1);

      s2 := ValidaCNPJ(s1);

      if s2 = true  then
        //showmessage('CNPJ Valido')
      else
        begin
          showmessage('CNPJ Inválido');
          MaskEdit1.Text := '000.000.000/0000-00';
        end;
    end;
  except
      MaskEdit1.Text := '000.000.000/0000-00';
  end;

end;

end.

Obs: Faça as modificações necessarias para o seu uso.

Ou se preferir veja esses links

https://www.google.com/search?q=validar+cpf++delphi&ie=utf-8&oe=utf-8&client=firefox-b

abraço

Valeu amigo, obrigado!

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...