sábado, 26 de maio de 2007

Rotina em DELPHI para Validar CPF e CNPJ


Esta "unit" tem a finalidade de testar o valor de um CPF digitado por um usuário
em uma interface adequada, conforme a figura ao lado.





















unit Unit_CPF_Painel_Central;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, jpeg;
type
TFrm_CPF_Painel_Central = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel1: TPanel;
GroupBox2: TGroupBox;
Edit2: TEdit;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
GroupBox3: TGroupBox;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
BitBtn5: TBitBtn;
Button1: TButton;
Memo1: TMemo;
Panel2: TPanel;
BitBtn6: TBitBtn;
Image1: TImage;
//===============
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
//===============
private
{ Private declarations }
function alx_boo_CPF_Validado(alx_str_cpf_digitado: String) : Boolean;
function alx_boo_CNPJ_Validado(alx_str_cnpj_digitado: String): Boolean;
//===============
public
{ Public declarations }
end;

var
Frm_CPF_Painel_Central: TFrm_CPF_Painel_Central;

implementation

{$R *.dfm}
//==============================================================================
function TFrm_CPF_Painel_Central.alx_boo_CPF_Validado(alx_str_cpf_digitado: String): Boolean;
var
alx_int_position : Array [1..11] of Integer;
alx_int_controle_d1 : Integer; alx_int_controle_d2 : Integer;
alx_str_controle_1 : String; alx_str_controle_2 : String;
alx_boo_apoio : Boolean; alx_int_i : Integer;
alx_int_j : Integer;
begin
try
alx_int_controle_d1:= 0;
alx_int_controle_d2:= 0;
if (System.Length(alx_str_cpf_digitado) = 11) then begin
for alx_int_i:= 1 to 9 do begin
alx_int_position[alx_int_i]:= strtoint(alx_str_cpf_digitado [alx_int_i]);
alx_int_controle_d1:= alx_int_controle_d1 + alx_int_position[alx_int_i]*(11 - alx_int_i)
end;
alx_int_position[10]:= strtoint(alx_str_cpf_digitado[10]);
alx_int_position[11]:= strtoint(alx_str_cpf_digitado[11]);
//------------------
alx_int_controle_d1:= 11 - (alx_int_controle_d1 mod 11);
if(alx_int_controle_d1 >= 10) then begin
alx_int_controle_d1:= 0;
end;
for alx_int_j:= 1 to 9 do begin
alx_int_controle_d2:= alx_int_controle_d2 + alx_int_position[alx_int_j]*(12 - alx_int_j);
end;
alx_int_controle_d2:= alx_int_controle_d2 + alx_int_controle_d1*(2);
alx_int_controle_d2:= 11 - (alx_int_controle_d2 mod 11);
if(alx_int_controle_d2 >= 10) then begin
alx_int_controle_d2:= 0;
end;
//-------------------
alx_str_controle_1:= inttostr(alx_int_controle_d1) + inttostr(alx_int_controle_d2);
alx_str_controle_2:= alx_str_cpf_digitado[10] + alx_str_cpf_digitado[11];
//-------------------
if(alx_str_controle_1 = alx_str_controle_2) then begin
alx_boo_apoio:= true;
end
else begin
alx_boo_apoio:= false;
end;
//--------------------
end
else begin
self.Edit1.SetFocus();
showmessage('Você apresentou um CPF com [' + inttostr(System.Length(alx_str_cpf_digitado)) + '] digitos. Digite o CPF com 11 números! ');
alx_boo_apoio:= false;
end;
except
on E: Exception do begin
self.Edit1.SetFocus();
showmessage('Digite o CPF com 11 dígitos numéricos! Veja: ' + E.Message);
alx_boo_apoio:= false;
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
function TFrm_CPF_Painel_Central.alx_boo_CNPJ_Validado(alx_str_cnpj_digitado: String): Boolean;
var
alx_int_position : Array [1..14] of Integer;
alx_int_controle_d1 : Integer;
alx_int_controle_d2 : Integer;
alx_str_controle_1 : String;
alx_str_controle_2 : String;
alx_boo_apoio : Boolean;
alx_int_i : Integer;
alx_int_j : Integer;
begin
try
alx_int_controle_d1:= 0;
alx_int_controle_d2:= 0;
if (System.Length(alx_str_cnpj_digitado) = 14) then begin
for alx_int_i:= 1 to 12 do begin
alx_int_position[alx_int_i]:= strtoint(alx_str_cnpj_digitado[alx_int_i]);
end;
alx_int_position[13]:= strtoint(alx_str_cnpj_digitado[13]);
alx_int_position[14]:= strtoint(alx_str_cnpj_digitado[14]);
//------------------
alx_int_controle_d1:= alx_int_position[1]*(5) + alx_int_position[2]*(4) + alx_int_position[3]*(3) + alx_int_position[4]*(2);
alx_int_controle_d1:= alx_int_controle_d1 + alx_int_position[5]*(9) + alx_int_position[6]*(8) + alx_int_position[7]*(7);
alx_int_controle_d1:= alx_int_controle_d1 + alx_int_position[8]*(6) + alx_int_position[9]*(5) + alx_int_position[10]*(4);
alx_int_controle_d1:= alx_int_controle_d1 + alx_int_position[11]*(3) + alx_int_position[12]*(2);
//------------------
alx_int_controle_d1:= 11 - (alx_int_controle_d1 mod 11);
if(alx_int_controle_d1 >= 10) then begin
alx_int_controle_d1:= 0;
end;
//------------------
alx_int_controle_d2:= alx_int_position[1]*(6) + alx_int_position[2]*(5) + alx_int_position[3]*(4) + alx_int_position[4]*(3);
alx_int_controle_d2:= alx_int_controle_d2 + alx_int_position[5]*(2) + alx_int_position[6]*(9) + alx_int_position[7]*(8);
alx_int_controle_d2:= alx_int_controle_d2 + alx_int_position[8]*(7) + alx_int_position[9]*(6) + alx_int_position[10]*(5);
alx_int_controle_d2:= alx_int_controle_d2 + alx_int_position[11]*(4) + alx_int_position[12]*(3) + alx_int_controle_d1*(2);
//------------------
alx_int_controle_d2:= 11 - (alx_int_controle_d2 mod 11);
if(alx_int_controle_d2 >= 10) then begin
alx_int_controle_d2:= 0;
end;
//-------------------
alx_str_controle_1:= inttostr(alx_int_controle_d1) + inttostr(alx_int_controle_d2);
alx_str_controle_2:= alx_str_cnpj_digitado[13] + alx_str_cnpj_digitado[14];
//-------------------
if(alx_str_controle_1 = alx_str_controle_2) then begin
alx_boo_apoio:= true;
end
else begin
alx_boo_apoio:= false;
end;
//--------------------
end
else begin
self.Edit2.SetFocus();
showmessage('Você apresentou um CNPJ com [' + inttostr(System.Length(alx_str_cnpj_digitado)) + '] digitos. Digite o CNPJ com 14 números! ');
alx_boo_apoio:= false;
end;
except
on E: Exception do begin
self.Edit2.SetFocus();
showmessage('Digite o CNPJ com 14 dígitos numéricos! Veja: ' + E.Message);
alx_boo_apoio:= false;
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
procedure TFrm_CPF_Painel_Central.BitBtn6Click(Sender: TObject);
begin
self.Close();
end;
//==============================================================================
//=== ... ao clicar neste botão a verificação do CPF será realizada...
//==============================================================================
procedure TFrm_CPF_Painel_Central.BitBtn1Click(Sender: TObject);
begin
if(self.alx_boo_CPF_Validado(self.Edit1.Text)) then begin
showmessage('O cpf [' + self.Edit1.Text + '] está correto!');
end
else begin
showmessage('O cpf [' + self.Edit1.Text + '] NÃO ESTÁ correto!');
end;
end;
//==============================================================================
procedure TFrm_CPF_Painel_Central.BitBtn2Click(Sender: TObject);
var
alx_int_resto: Integer;
begin
alx_int_resto:= (4 mod 3);
showmessage('o resto da divisão de 4 por 3 é: [' + inttostr(alx_int_resto) + ']');
end;
//==============================================================================
//=== ... ao clicar neste botão a verificação de CNPJ será realizada...
//==============================================================================
procedure TFrm_CPF_Painel_Central.BitBtn3Click(Sender: TObject);
begin
if(self.alx_boo_CNPJ_Validado(self.Edit2.Text)) then begin
showmessage('O cnpj [' + self.Edit2.Text + '] está correto!');
end
else begin
showmessage('O cnpj [' + self.Edit2.Text + '] NÃO ESTÁ correto!');
end;
end;
//==============================================================================
end.

Nenhum comentário: