Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Validar Cpf,cnpj,rg,


Guest Murilo Carlos Cardoso

Question

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 to post
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148883
    • Total Posts
      644939
×
×
  • Create New...