Algoritmo de Validação de CPF
olá pessoal, nesse meu 50º post vou está mostrando um algoritmo que muita gente que está iniciando na programação tem curiosidade de saber como funciona. Vocês vão perceber que é bem simples e depende da criatividade de cada um para desenvolver o melhor algoritmo em qualquer linguagem. Vamos ao algoritmo >>
>> Passos do Algoritmo <<
Para cada indivíduo, a sua inscrição no cadastro de Pessoas Físicas(CPF) é composto por um número de 9 algarismos e outro número de 2 algarismos, vamos considerar esses algarismos como sendo “d1″ e “d2″, em que os d1 e d2 são denominados dígitos verificadores. Os dígitos verificadores são calculados, a partir da esquerda, da seguinte
maneira:
- Os 9 primeiros algarismos são multiplicados pela sequência 10, 9, 8, 7, 6, 5, 4, 3, 2 (o primeiro por 10, o segundo por 9, e assim por diante);
- Em seguida, calcula-se o resto “r1″ da divisão da soma dos resultados das multiplicações por 11, e se o resto for zero ou 1, d1 é zero, caso contrário d1 = (11-r1);
- O dígito d2 é calculado pela mesma regra, na qual os números a serem serem multiplicados pela sequência dada são contatos a partir do segundo algarismo, sendo d1 o último algarismo, isto é, d2 é zero se o resto “r2″ da divisão por 11 da somas das multiplicações for zero ou 1, caso contrário, d2 = (11-r2);
Para facilitar o entendimento desenvolvi um algoritmo em java.
Primeiramente criei a Classe Valida >>
public class Valida {
//ATRIBUTOS
private String cpf;
private int d1,d2;
//MÉTODOS
void setCpf(String cpf){
this.cpf = cpf;
}
void setD1(int d1){
this.d1 = d1;
}
void setD2(int d2){
this.d2 = d2;
}
int getD1(){
return this.d1;
}
int getD2(){
return this.d2;
}
String getCpf(){
return this.cpf;
}
//FAZ O CÁLCULO DO 1º DÍGITO VERIFICADOR
int dV1(String cpf){
//declaração do vetor para desmembrar a string
int v[] = new int[11];
int soma = 0, sequencia = 10, resto;
//desmembrando a string e transformando cada caractere em inteiro
for (int i=0; i<9; i++){
//transformação dos caracteres em inteiro
v[i] = Integer.parseInt(cpf.substring(i,i+1));
//faz o cálculo com a sequência de 10 até 2
soma = soma + (v[i] * sequencia);
//decrementa a sequência
sequencia--;
}
//pega o resto da divisão da soma das multiplicações com 11
resto = soma % 11;
//caso resto igual a 0 ou a 1 então retorna 0
if (resto == 0 || resto == 1){
return 0;
}else{ //caso contrário retorna 11 menus o resto
return (11 - resto);
}
}
/** FAZ O CÁLCULO DO 2º DÍGITO VERIFICADOR
* A ÚNICA DIFERENÇA É QUE A MULTIPLICAÇÃO DA
* SEQUÊNCIA É FEITA A PARTIR DO SEGUNDO ALGARISMO
* DO CPF ATÉ O 1º DÍGITO VERIFICADOR
*/
int dV2(String cpf){
int v[] = new int[11];
int soma = 0, sequencia = 10, resto;
for (int i=1; i<10; i++){
v[i] = Integer.parseInt(cpf.substring(i,i+1));
soma = soma + (v[i] * sequencia);
sequencia--;
}
resto = soma % 11;
if (resto == 0 || resto == 1){
return 0;
}else{
return (11 - resto);
}
}
}
Classe Principal >>
import java.util.*;
import javax.swing.*;
/**
*
* @author leowgweb
*/
public class CpfValida {
public static void main(String[] args) {
String cpf;
//instanciando a classe
Valida v = new Valida();
/*
* caso ocorra alguma exceção(Se o usuário digitar
* caracteres em vez de números)
*/
try{
cpf = JOptionPane.showInputDialog(null, "Entre com o seu CPF","Verificação"
,JOptionPane.INFORMATION_MESSAGE);
//caso a quantidade de caracteres exeda ou seja inferior a 11
if (cpf.length() != 11){
JOptionPane.showMessageDialog(null, "A quantidade de algarismos "
+ "não está correta!","ERRO",JOptionPane.WARNING_MESSAGE);
//caso esteje tudo ok
}else{
//seta os dígitos verificadores do cpf digitado
v.setD1(Integer.parseInt(cpf.substring(9,10)));
v.setD2(Integer.parseInt(cpf.substring(10,11)));
//faz a verificação dos dígitos verificadores
if ((v.getD1() == v.dV1(cpf)) && (v.getD2() == v.dV2(cpf))){
JOptionPane.showMessageDialog(null, "CPF VÁLIDO");
}else{
JOptionPane.showMessageDialog(null, "CPF INVÁLIDO","Verifica",
JOptionPane.WARNING_MESSAGE);
}
}
//caso exista alguma exceção então da um erro
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Erro: Digite apenas Números! "
,"ERRO",JOptionPane.ERROR_MESSAGE);
}
}
}








































