Codigo que valida cpf

3 respostas
C

estava procurando aqui no guj algum codigo que validasse cpf. Encontrei muitos, no entando a maioria incompletos.
Estou deixando para os amigos o código que desenvolvi. Peço para aqueles que conseguirem encurtá-lo postar para a gente.
[]´s a todos.

public class ValidarCpf {
	
	private static int primeiroDigitoVerificardor;
	private static int segundoDigitoVerificardor;
	private final static String ZERO = "[telefone removido]";
	private final static String UM =   "[telefone removido]";
	private final static String DOIS = "[telefone removido]";
	private final static String TRES = "[telefone removido]";
	private final static String QUATRO = "[telefone removido]";
	private final static String CINCO = "[telefone removido]";
	private final static String SEIS =  "[telefone removido]";
	private final static String SETE =  "[telefone removido]";
	private final static String OITO =  "[telefone removido]";
	private final static String NOVE =  "[telefone removido]";
	
	public static boolean validarCpf(String cpf){
		calculoPrimeiroDigito(cpf);
		return verificaQuantidade(cpf);
			
	}
	
	public static void calculoPrimeiroDigito(String cpf){
		         cpf = cpf.substring(0,9);
		final char numeros[] = new char[cpf.length()];
		final String modificar[] = new String[numeros.length];
		final int valores[] = new int[numeros.length];
		final int resultado[] = new int[numeros.length];
		final int resultadoComDigito[] = new int[10];
	    int total = 0;
		int sequencia = 10;
		int resultadoDivisao = 0;
		for (int i = 0; i < numeros.length; i++) {
			numeros[i] = cpf.charAt(i);
			modificar[i] =Character.toString(numeros[i]);
			valores[i] = Integer.parseInt(modificar[i]);
			resultado[i] = (valores[i] *(sequencia - i));
			total += resultado[i];
		}
		
	      resultadoDivisao = (total % 11);	
	      if(resultadoDivisao < 2){
	    	 primeiroDigitoVerificardor = 0;
	      }else{
	    	  primeiroDigitoVerificardor = (11 - resultadoDivisao);
	      }
	      
	      for (int i = 0; i <numeros.length; i++) {
	    	  resultadoComDigito[i] = valores[i];
		}
		
	      resultadoComDigito[9] = primeiroDigitoVerificardor;
	      
	      calculoSegundoDigito(resultadoComDigito);
	
	}
	public static void calculoSegundoDigito(int[] resultadoComDigito){
		int sequencia = 11;
		int total =0;
		int resultado[] = new int[resultadoComDigito.length];
		for (int i = 0; i < resultadoComDigito.length; i++) {
			
			resultado[i] = (resultadoComDigito[i]* (sequencia - i));
			total += resultado[i];
			
		}
		
		total = (total % 11);
		if(total < 2){
			segundoDigitoVerificardor = 0;
	      }else{
	    	 segundoDigitoVerificardor = (11 - total);
	      }
	}

	public static boolean verificaQuantidade(String cpf){
		if((cpf.length() < 11)|| (cpf.equals(ZERO))|| (cpf.equals(UM))||(cpf.equals(DOIS))||
		  (cpf.equals(TRES))||(cpf.equals(QUATRO))||(cpf.equals(CINCO))||(cpf.equals(SEIS))||
		  (cpf.equals(SETE))|| (cpf.equals(OITO))||(cpf.equals(NOVE))){
			
		    return false;
		    
		  }else{
		   return verificaDigitos(cpf);
		 }
		
	}
	
	public static boolean verificaDigitos(String cpf){
		String digitoUm = cpf.substring(9,10);
		String digitoDois = cpf.substring(10,11);
		if((primeiroDigitoVerificardor == Integer.parseInt(digitoUm))&&
				(segundoDigitoVerificardor == Integer.parseInt(digitoDois))){
			return true;
		}else{
		return false;
	}
		}
}

3 Respostas

alucardeck

parabens pela iniciativa… mas santo batman… qto POG… heheh

dah pra dar uma boa organizada nisso tudo…

Fox_McCloud

Uma dica: ao invés de criar todas essas constantes para simbolizar entradas repetidas ([telefone removido]), use uma expressão regular… por exemplo:

Pattern digRepetidos = Pattern.compile("0{11}|1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}");

Se a entrada bater com o matcher do seu padrão de dígitos repetidos você já sabe que a entrada é inválida!

:wink:

sjoaquim

Seguindo essa linha das expressões regulares, também dá para fazer fácil um método para formatar o CPF:

public String formatarCpf(String cpfOriginal){ return cpfOriginal.replaceAll("^([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})$","$1.$2.$3-$4"); }

Criado 25 de agosto de 2008
Ultima resposta 25 de ago. de 2008
Respostas 3
Participantes 4