20081217

Validação de CPF no C++ Builder

Mio dios!
Como foi dificil fazer isso..
sem mais vou postar o código e escrever o que deve-se fazer com ele...

Bibliotecas







Código direto na classe...
Código da classe


//Verificador de cpf

int valor, fator, dig1, dig2, i;
String num;

if(ECpf->Text.Length()==14 ) {

//Onde "ECpf" é o campo onde a pessoa digita o valor do cpf.
//Obs.: nesse caso o cpf é armazenado com 14 dígitos, pois considera os pontos e o traço.

num = ECpf->Text.SubString(1,3);
num = num + ECpf->Text.SubString(5,3);
num = num + ECpf->Text.SubString(9,3);
num = num + ECpf->Text.SubString(13,2);

/* PRIMEIRO DIGITO VERIFICADOR */

int aux = ((atoi(num.SubString(1,1).c_str())*10) + (atoi(num.SubString(2,1).c_str())*9)+ (atoi(num.SubString(3,1).c_str())*8)+ (atoi(num.SubString(4,1).c_str())*7)+ (atoi(num.SubString(5,1).c_str())*6)+( atoi(num.SubString(6,1).c_str())*5)+ (atoi(num.SubString(7,1).c_str())*4)+ (atoi(num.SubString(8,1).c_str())*3)+ (atoi(num.SubString(9,1).c_str())*2));
valor = aux;
fator = 0;
fator = valor%11;
dig1 = fator< valor =" 0;" aux2 =" ((atoi(num.SubString(1,1).c_str())*11)" valor =" aux2;" fator =" valor%11;" dig2 =" fator" v =" ECpf-">Text.SubString(13,1);
String d = ECpf->Text.SubString(14,1);

int Iv = atoi(v.c_str());
int Id = atoi(d.c_str());

if ((Iv == dig1) && (Id == dig2))
ShowMessage("CPF ok");
else
ShowMessage("CPF inválido");
}


Código em uma classe separada...
Código da Classe

class VerificaCpf
{
public:
int ValidaCpf(String);
String Cpf;
VerificaCpf(void){};
~VerificaCpf(void){};
};

int VerificaCpf::ValidaCpf(String cpf)
{
int valor, fator, dig1, dig2, i;
String num;
String Cpf = cpf;
num = Cpf.SubString(1,3);
num = num + Cpf.SubString(5,3);
num = num + Cpf.SubString(9,3);
num = num + Cpf.SubString(13,2);

/* PRIMEIRO DIGITO VERIFICADOR */

int aux = ((atoi(num.SubString(1,1).c_str())*10) + (atoi(num.SubString(2,1).c_str())*9)+ (atoi(num.SubString(3,1).c_str())*8)+ (atoi(num.SubString(4,1).c_str())*7)+ (atoi(num.SubString(5,1).c_str())*6)+( atoi(num.SubString(6,1).c_str())*5)+ (atoi(num.SubString(7,1).c_str())*4)+ (atoi(num.SubString(8,1).c_str())*3)+ (atoi(num.SubString(9,1).c_str())*2));
valor = aux;
fator = 0;
fator = valor%11;
dig1 = fator< 2 ? 0 : 11-fator;

/* SEGUNDO DIGITO VERIFICADOR */

valor = 0;
int aux2 = ((atoi(num.SubString(1,1).c_str())*11) + (atoi(num.SubString(2,1).c_str())*10)+ (atoi(num.SubString(3,1).c_str())*9)+ (atoi(num.SubString(4,1).c_str())*8)+ (atoi(num.SubString(5,1).c_str())*7)+( atoi(num.SubString(6,1).c_str())*6)+ (atoi(num.SubString(7,1).c_str())*5)+ (atoi(num.SubString(8,1).c_str())*4)+ (atoi(num.SubString(9,1).c_str())*3)+ (atoi(num.SubString(10,1).c_str())*2));
valor = aux2;
fator = valor%11;
dig2 = fator < 2 ? 0 : 11-fator;

String v = Cpf.SubString(13,1);
String d = Cpf.SubString(14,1);

int Iv = atoi(v.c_str());
int Id = atoi(d.c_str());

if ((Iv == dig1) && (Id == dig2))
return 1;
else
return 0;

}



e será salva em ".h"