Validação de CPF

3 respostas
San_n

Boa Tarde Galera!! To precisando entender um detalhe aqui de um código e gostaria muito da vossa ajuda… eu gostaria de saber o por que subtrair o decimal “0” do caractere 0.
Não entendi muito bem e gostaria de saber …

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package util;

import java.util.InputMismatchException;
/**
*

  • @author Desenvolvimento
    */
    public class ValidarCPF {

    public static boolean isCPF(String CPF) {
    
    // considera-se erro CPF’s formados por uma sequencia de numeros iguais
    
    if (CPF.equals([telefone removido]) ||
    
    CPF.equals([telefone removido]) ||
    
    CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||
    
    CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||
    
    CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||
    
    CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||
    
    (CPF.length() != 11))
    
    return(false);
    
    char dig10, dig11;
     int soma, i, res, num, peso;
       
     // "try" - protege o codigo para eventuais erros de conversao de tipo (int)
     // Calculo do 1o. Digito Verificador
     try { 
         soma = 0;
         peso = 10;
     // 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)         
         for (i=0; i<9; i++) {              // 0 5 1
         num = (int)(CPF.charAt(i) ); // (CPF.charAt(i) - 48);   não entendi essa parte ... por que subtrair o decimal 0 do caractere 0???
         soma = soma + (num * peso);
         peso = peso - 1;
         }
       
         res = 11 - (soma % 11);
         if ((res == 10) || (res == 11))
             dig10 = '0';
         else dig10 = (char)(res ); // (CPF.charAt(i) +48); converte no respectivo caractere numerico
       
     // Calculo do 2o. Digito Verificador
         soma = 0;
         peso = 11;
         for(i=0; i<10; i++) {
         num = (int)(CPF.charAt(i) ); //(CPF.charAt(i) - 48);
         soma = soma + (num * peso);
         peso = peso - 1;
         }
       
         res = 11 - (soma % 11);
         if ((res == 10) || (res == 11))
              dig11 = '0';
         else dig11 = (char)(res ); //(CPF.charAt(i) + 48);
       
     // Verifica se os digitos calculados conferem com os digitos informados.
         if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10)))
              return(true);
         else return(false);
             } catch (InputMismatchException erro) {
             return(false);
         }
     }
       
     public static String formatarCPF(String CPF) {
         return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
         CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
     }
    

    }

3 Respostas

staroski

Essa linha está convertendo o caractere na posição i em um int.
Não está subtraindo 0 do caractere '0'.

Crocodilo

@San_n , veja aqui nesse link já tem uma implementação completa https://www.devmedia.com.br/validando-o-cpf-em-uma-aplicacao-java/22097

rodriguesabner

Ela pegou de lá

Criado 16 de agosto de 2018
Ultima resposta 17 de ago. de 2018
Respostas 3
Participantes 4