Ir ao conteúdo
  • Cadastre-se

Validador de CPF " Esta Correto? "


Posts recomendados

Bom...

 

Estou Fazendo um Programa em c++ que pede o usuário um cpf valido  então fiz uma classe para validar o cpf queria saber se este codigo realmente esta funcionando... acho q e difícil verificar 100% se um cpf e valido mas queria saber se a classe serve para o gasto.

#include <iostream>
#include <string.h>
#include <string>
#include <ctype.h>
#include <stdlib.h>

using namespace std;

class ValidaCPF{
	
private:

string cpf;
		
public:
		
void validaCpf(){
			
int teste = -1;

do{

		system("cls");
		
		cout << " Digite 1 CPF Valido : " << endl;

		cout << "---------------------  " << endl;
		cout << "| Apenas 11 Digitos |  " << endl;
		cout << "| Apenas -- Numeros |  " << endl;
		cout << "|___________________|  " << endl;
		
        string cpfTemp;
		int QuantDigitos;
		QuantDigitos = 0;

		getline(cin, cpfTemp);
		
		if(cpfTemp.size()<11){
			continue;
		}
        
		for(int i = 0; i <= cpfTemp.size() - 1; i++)
		{

			if(isdigit(cpfTemp.at(i)))
			{
				++QuantDigitos;
			}
		}
         
		if(QuantDigitos == cpfTemp.size() && cpfTemp.size() == 11);
		else
			continue;

        	
    	int verificao2 = 0;
		
		for(int i = 0; i < 12; i++){
	    
		for(int j = 0; j < 12; j++){
		
		if(cpfTemp[0]==cpfTemp[1]){
			++verificao2;
		}}}
		
		if(verificao2>10){
			continue;
		}
		
		int digitoN1  = cpfTemp.at(0) - 48;
		int digitoN2  = cpfTemp.at(1) - 48;
		int digitoN3  = cpfTemp.at(2) - 48;
		int digitoN4  = cpfTemp.at(3) - 48;
		int digitoN5  = cpfTemp.at(4) - 48;
		int digitoN6  = cpfTemp.at(5) - 48;
		int digitoN7  = cpfTemp.at(6) - 48;
		int digitoN8  = cpfTemp.at(7) - 48;
		int digitoN9  = cpfTemp.at(8) - 48;
		int digitoN10 = cpfTemp.at(9) - 48;
		int digitoN11 = cpfTemp.at(10) - 48;
		
		int verificacaoN3 = 0;
		
		verificacaoN3 = digitoN1 * 10 + digitoN2 * 9 + digitoN3 * 8 +
		                digitoN4 *  7 + digitoN5 * 6 + digitoN6 * 5 +
					    digitoN7 *  4 + digitoN8 * 3 + digitoN9 * 2 ; 
					   
        verificacaoN3 = verificacaoN3 * 10;
        
        if(verificacaoN3%11==digitoN10);
		else
			continue;
		
		
		int verificacaoN4 = 0;
		
		verificacaoN4 = digitoN1 * 11 + digitoN1 * 10 + digitoN2 * 9 +
		                digitoN3 * 8  + digitoN4 *  7 + digitoN5 * 6 +
					    digitoN6 * 5  + digitoN7 *  4 + digitoN8 * 3 +  
                        digitoN9 * 2 ; 
		
        verificacaoN4 = verificacaoN4 *	10;
	
		if(verificacaoN3%11==digitoN10);
        else
			continue;
		

        cout << " O Cpf Digitado e Valido..";
        
		teste = 0;
	
	}while(teste!=0);
	
		
		
		}
		};
	

	ValidaCPF obj;

int main(){

obj.validaCpf();

	return 0;
}

caso alguém ache alguma falha peço que modifique a classe para resolver a falha, também queria saber se tem como minimizar a escrita do código tipo tem uma parte que tive que declarar 11 variáveis do tipo int 1 para cada digito... caso tenha como minimizar o código em algumas partes peço que me falem.

 

usei como referencia para fazer a classe o site : http://www.dicasdeprogramacao.com.br/algoritmo-para-validar-cpf/ 

que mostra como e feita a validação de um c++ em alguma linguagem que nao me lembro agora...

 

Obrigado!!

Link para o comentário
Compartilhar em outros sites

@CiroboyBR  Na Verdade ate já havia tentando usar um vetor mais não estava conseguindo fazer operações com ele  acho que estava acessando de forma errada....

 

Olhando atentamente o site : http://www.dicasdeprogramacao.com.br/algoritmo-para-validar-cpf/

percebi que o código estava com muitas Falhas..

 

Então resolvi as falhas diminui a escrita do código usando o vetor de inteiros e com alguns for Amais.

 

Ficou Assim :

#include <iostream>                                 
#include <stdlib.h>
#include <string>
#include <ctype.h>

using namespace std;

class ValidaCPF{
	
private:

string cpf;
		
public:
		
void validaCpf(){
			
int teste = -1;


do{
		system("cls");                              
		
		cout << " Digite 1 CPF Valido : " << endl;   

		cout << "---------------------  " << endl;   
		cout << "| Apenas 11 Digitos |  " << endl;   
		cout << "| Apenas -- Numeros |  " << endl;  
		cout << "|___________________|  " << endl;  
		
		getline(cin, cpf);                           
		
        int verifica;                              
        int tamDoCpf;                                        
        
        verifica = 0;                             
        tamDoCpf = cpf.size() - 1;                 
        
        if(tamDoCpf+1!=11)                     
			continue;                         
		
		for(int i = 0; i <= tamDoCpf; i++){  

			if(!isdigit(cpf.at(i))){           
               ++verifica;}                  
		}
		
		if(verifica>0){                       
			continue;             
		}                                    
		
		verifica = 0;
		
	         
        for(int i = 0; i < cpf.size() - 1; i++){  
			if(cpf.at(i)==cpf.at(i+1)){          
            ++verifica;}}                      
        
		if(verifica==10)                   
			continue;                      
		
		
		int digitosDoCpf[11];
		
		for(int i = 0; i < 11; i++){
			digitosDoCpf[i]=cpf.at(i)-48;}
			
        verifica = 0;
		int numeros = 10;
		
		for(int i = 0; i < 9; i++){
			verifica = verifica + digitosDoCpf[i] * numeros--;
		}
		
		verifica = verifica * 10;
		
		verifica = verifica%11;
		
		if(verifica==10)
			verifica = 0;
		 
        if(verifica!=digitosDoCpf[9])
			continue;
		
		verifica = 0;
		numeros = 11;
		
		for(int i = 0; i < 10; i++){
			verifica = verifica + digitosDoCpf[i] * numeros--;
		}
		
		verifica = verifica * 10;
		
		verifica = verifica%11;
		
		if(verifica==10)
			verifica = 0;
		 
        if(verifica!=digitosDoCpf[10])
			continue;
		 
		cout << " O CPF : " << cpf << " E Valido... " << endl;
		
		
		teste = 0;
		}while(teste!=0);
		
		
		}
	
		};
	
int main(){

ValidaCPF obj;
obj.validaCpf();

	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!