/**
* Curso de Programação JAVA
*
* Exercício 14- Programa para validar os dígitos
*               verificadores do CPF
*
* @author         Prof. Eric Loque M. Xavier
* @version        2.0.0
* Data            28/06/2017
*
*Problema:
*Elabore um programa em Java capaz de ler um número de CPF fornecido pelo usuário e, através do cálculo do digito verificador, verifique se o número é válido.
*
*Objetivo:
*Desenvolver o raciocínio lógico e auxiliar na fixação dos conteúdos anteriormente apresentados.
*
*Ref. http://www.vogella.com/tutorials/EclipseDebugging/article.html
*	  https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-debugging/#22-4-debug-avancado
*/
package revisao;

import javax.swing.JOptionPane;
 
public class Aula14 {
	
	//Método para averiguar, através do digito verificador
	//do documento, se um número de CPF foi digitado incorretamente 
	public static boolean validCPF(String cpf){
		
        //Declaração e inicialização das variáveis
        boolean valido = false;
        int digito1 = 0;
        int digito2 = 0;
        
        try{
	        if (cpf.length() == 11)
	         {
	            //Calculando o primeiro dígito    
	            digito1 = Integer.parseInt(cpf.substring(0,1)) * 10;
	            digito1 = Integer.parseInt(cpf.substring(1,2)) * 9 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(2,3)) * 8 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(3,4)) * 7 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(4,5)) * 6 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(5,6)) * 5 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(6,7)) * 4 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(7,8)) * 3 + digito1;
	            digito1 = Integer.parseInt(cpf.substring(8,9)) * 2 + digito1;
	            digito1 = (11-(digito1 % 11));

	           
	            if (digito1>9) digito1 = 0;
	            
	            //Calculando o segundo dígito
	            digito2 += Integer.parseInt(cpf.substring(0,1)) * 11;
	            digito2 += Integer.parseInt(cpf.substring(1,2)) * 10;
	            digito2 += Integer.parseInt(cpf.substring(2,3)) * 9;
	            digito2 += Integer.parseInt(cpf.substring(3,4)) * 8;
	            digito2 += Integer.parseInt(cpf.substring(4,5)) * 7;
	            digito2 += Integer.parseInt(cpf.substring(5,6)) * 6;
	            digito2 += Integer.parseInt(cpf.substring(6,7)) * 5;
	            digito2 += Integer.parseInt(cpf.substring(7,8)) * 4;
	            digito2 += Integer.parseInt(cpf.substring(8,9)) * 3;
	            digito2 += digito1 * 2;
	            digito2 = (11-(digito2 % 11) <= 9 ) ? (11-digito2 % 11):0;

	            valido = Integer.parseInt(cpf.substring(9,11)) == digito1*10+digito2;
	         }
        }catch (Exception e) {} 
        
        //Verificando números inválidos
        if ( cpf.equals("00000000000")
          || cpf.equals("11111111111")
          || cpf.equals("22222222222")
          || cpf.equals("33333333333")
          || cpf.equals("44444444444")
          || cpf.equals("55555555555")
          || cpf.equals("66666666666")
          || cpf.equals("77777777777")
          || cpf.equals("88888888888")
          || cpf.equals("99999999999")) valido = false;
       
        //Retorna verdadeiro para dígitos verificadores corretos
        //Retorna falso para cálculo dos dígitos verificadores 
        //divergente dos informados.
        return valido;
    }   
 
	
	//Método principal
    public static void main(String[] args){
        	
       //Usando um diálogo de entrada para solicitar o nome do usuário
       String cpf =  JOptionPane.showInputDialog("Informe seu CPF.");
            
     //Criando caixa de diálogo com a resposta
       if (validCPF(cpf))
          JOptionPane.showMessageDialog(null, "Digitos verificadores em conformidade com o CPF informado","CPF Válido",JOptionPane.INFORMATION_MESSAGE);
       else
          JOptionPane.showMessageDialog(null, "Digitos verificadores divergem do CPF informado","CPF Inválido",JOptionPane.ERROR_MESSAGE);
    }
}