Ir para conteúdo
Fórum Script Brasil

Rui Barbosa Santos

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Posts postados por Rui Barbosa Santos

  1. 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!

  2. 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.

×
×
  • Criar Novo...