PROJETO VALIDAÇÃO DE CPF – EM C E JAVA
Transcrição
PROJETO VALIDAÇÃO DE CPF – EM C E JAVA
PROJETO VALIDAÇÃO DE CPF – EM C E JAVA ENUNCIADO(Código-fonte no final) Considere o seguinte exemplo de CPF hipotético: 493.558.218-91. No final de todo CPF existem 2 dígitos verificadores, neste caso 9 e 1. Abaixo será apresentado como se calculam os mesmos. Calculando o PRIMEIRO Dígito verificador: Deve-se distribuir os 9 primeiros dígitos com os pesos: 10, 9, 8, 7, 6, 5, 4, 3, 2 da esquerda para direita. 4 9 3. 5 5 8. 2 1 8 – 91 Multiplicar cada dígito pelo seu respectivo peso e somar tudo. Ex: (10 x 4) = 40 + (9 x 9) = 81 + (3 x 8 ) = 24 + (7 x 5) = 35 + (6 x 5) = 30 + (5 x 8 ) = 40 + (4 x 2) = 8 + (3 x 1) = 3 + (2 x 8 ) = 16 Totalizando: 277 Agora deve-se calcular o resto da divisão por 11 Ex: 277 % 11 = 2 E retirar 11 deste resto. 11 – 2 = 9 Ex: d1 = 11 – (soma1%11); caso o resultado apresente 10 ou 11, o dígito verificador será considerado zero Ex: if((d1 == 10) || (d1 == 11)) d1 = 0; Caso contrário, o resultado será o PRIMEIRO dígito verificador do cpf. Neste caso, foi 9. — Calculando o SEGUNDO Dígito verificador: Deve-se distribuir os 10 primeiros digitos com os pesos 11, 10, 9, 8, 7, 6, 5, 4, 3 , 2 da esquerda para direita. 4 9 3. 5 5 8. 2 1 8 – 9 1 Observe que agora o primeiro dígito verificador entra no cálculo. Multiplicar cada dígito pelo seu respectivo peso e somar tudo. Ex: (11 x 4) = 44 + (10 x 9) = 90 + (9 x 3) = 27 + (8 x 5) = 40 + (7 x 5) = 35 + (6 x 8 ) = 48 + (5 x 2) = 10 + (4 x 1) = 4 + (3 x 8 ) = 24 + (2 x 9) = 18 Totalizando: 340 Agora deve-se calcular o resto da divisão por 11 Ex: 340 % 11 = 10 E retirar 11 deste resto. 11 – 10 = 1 Ex: d2 = 11 – (soma2%11); caso o resultado apresente 10 ou 11, o dígito verificador será considerado zero Ex: if((d2 == 10) || (d2 == 11)) d2 = 0; Caso contrário, o resultado será o SEGUNDO dígito verificador do cpf. Neste caso, foi 1. Caso o cálculo do PRIMEIRO dígito seja exatamente igual ao dígito da posição 10 digitado pelo usuário E o cálculo do SEGUNDO dígito seja exatamente igual ao dígito da posição 11 digitado pelo usuário, então o CPF é válido. if((d1 == novo[9])&&(d2 == novo[10])) System.out.println(“válido”); else System.out.println(“inválido”); Mais detalhes de como funciona o algoritmo de geração de cpf: link Caso queira testar vários tipos de cpf no programa, visite este site gerador de CPFs: http://www.geradorcpf.com/ ANEXO A – Código em C /* Nome: verifica_cpf.c Autor: Guilherme Bezerra Fernandes Data: 26/11/11 Descrição: Programa que valida cpf */ valida(char c[]); main() { char v[11]; //Entrada de cpf em char printf("CPF: "); scanf("%s", &v); if (valida(v)) printf("Cpf Valido"); else printf("Cpf Invalido"); getch(); } int valida(char cpf[11]) { int novo[11]={}; //vetor convertido int soma1=0, soma2=0; char temp[1]; //temporária int d1,d2=0; //dígito 1 e 2 int i = 0; //valor convertido de char para int int j = 10; //contador int k = 11; //contador int c=0; //conversão de todo o vetor char para int for(c=0;c<=10;c++){ temp[0] = cpf[c]; i = atoi(temp); novo[c] = i; } //armazenando valores de soma do digito 1 for(c=0;c<=8;c++){ soma1 = soma1 + (novo[c] * j); j--; } //armazenando valores de soma do digito 2 for(c = 0; c <= 9; c++){ soma2 = soma2 + (novo[c] * k); k--; } //busca do digito 1 d1 = 11 - (soma1%11); if((d1 == 10) || (d1 == 11)) d1 = 0; //busca do digito 2 d2 = 11 - (soma2%11); if((d2 == 10) || (d2 == 11)) d2 = 0; if((d1 == novo[9])&&(d2 == novo[10])){ return 1; }else return 0; } ANEXO B – Código em Java /* Nome: valida_cpf.java Autor: Guilherme Bezerra Fernandes Data: 30/11/11 Descrição: Programa que valida cpf em Java */ Import java.util.Scanner; public classCpf { public static voidmain(String[] args) { System.out.println("CPF: "); Scanner ent = newScanner(System.in); if(Cpf.valida(ent.nextLine())) System.out.println("Cpf Válido"); else System.out.println("Cpf Inválido"); } static boolean valida(String cpf) { intnovo[] = new int[11]; intsoma1=0, soma2=0; intc,j=10,k=11; intd1,d2=0; //dígito 1 e 2 //conversão de todo o vetor char para int for(c=0;c<=10;c++){ novo[c] = Integer.parseInt(cpf.substring(c,c+1)); } //armazenando valores de soma do digito 1 for(c=0;c<=8;c++){ soma1 = soma1 + (novo[c] * j); j--; } //armazenando valores de soma do digito 2 for(c = 0; c <= 9; c++){ soma2 = soma2 + (novo[c] * k); k--; } //busca do digito 1 d1 = 11 - (soma1%11); if((d1 == 10) || (d1 == 11)) d1 = 0; //busca do digito 2 d2 = 11 - (soma2%11); if((d2 == 10) || (d2 == 11)) d2 = 0; if((d1 == novo[9])&&(d2 == novo[10])){ return true; }else return false; } }