Bom dia a todos Para encontrar uma solução para a verificação de CPF, eu procurei no google e achei um link interessante, que mostra essa solução pronta. Eu fiz pequenas alterações para encaixar com os princípios da aula anterior (fiquem à vontade para utilizar):
import java.util.InputMismatchException;
public class CPF {
private String CPF;
//link do código utilizado: https://www.4devs.com.br/gerador_de_cpf
public CPF(String CPF) {
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") ||
(CPF.length() != 11)){
throw new IllegalArgumentException("CPF invalido");
}
char dig10, dig11;
int sm, i, r, num, peso;
// "try" - protege o codigo para eventuais erros de conversao de tipo (int)
try {
// Calculo do 1o. Digito Verificador
sm = 0;
peso = 10;
for (i=0; i<9; i++) {
// converte o i-esimo caractere do CPF em um numero:
// por exemplo, transforma o caractere '0' no inteiro 0
// (48 eh a posicao de '0' na tabela ASCII)
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig10 = '0';
else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
// Calculo do 2o. Digito Verificador
sm = 0;
peso = 11;
for(i=0; i<10; i++) {
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig11 = '0';
else dig11 = (char)(r + 48);
// Verifica se os digitos calculados conferem com os digitos informados.
if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))){
this.CPF = CPF;
}
else throw new IllegalArgumentException("CPF invalido");
} catch (InputMismatchException erro) {
throw new IllegalArgumentException("CPF invalido");
}
}
public String imprimeCPF() {
return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
}
}
E para confirmar, eu vou deixar o código do teste de verificação que eu fiz nos comentários (para não passar dos 5 mil caracteres).
Criticas e sugestões de melhoria, podem deixar um novo código nos comentários