Validador de CPF

O objetivo deste projeto é exercitar o uso de funções e procedimentos:

1) No link a seguir você encontra a explicação do algoritmo usado pela Receita Federal para validação de um CPF:

https://dicasdeprogramacao.com.br/algoritmo-para-validar-cpf/


Estude-o e monte uma planilha em Excel ou Calc para implementar a ideia, como esta aqui.


2) Neste link há um código em C que valida o primeiro dígito verificador. Faça um código que valide além do primeiro, também o segundo dígito verificador. 

Código base:

#include<stdio.h>

int main()
{
int cpf[11];
int m1[9]={10,9,8,7,6,5,4,3,2};
int m2[10]={11,10,9,8,7,6,5,4,3,2};
int i;
printf("Entre com os 11 digitos do CPF:");
for(i=0;i<11;i++)
{ scanf("%d", &cpf[i]);
}
//Cálculo do primeiro dígito verificador
int soma=0;
for(i=0; i<9; i++)
{ soma = soma + cpf[i]*m1[i];
}
int resto = ((soma*10) % 11)%10;
  
if(resto == cpf[9]){
printf("\nPrimeiro verificador valido.");
}
else{
printf("\nErro no primeiro verificador.");
}
return 0;
}


Você pode fazer um CTRL+C e CTRL+V com atenção, visto que o algoritmo para o segundo dígito é muito parecido com o do primeiro.

A resposta está aqui; tente fazer sem ver a solução!


3) Agora crie uma função que verifique um dígito qualquer (perceba a semelhança na verificação de cada um dos dígitos) e altere o código.

Primeira solução aqui.

Solução melhorada aqui.

4) Agora vamos melhorar mais ainda o código do validador de CPFs com função acrescentando a checagem de todos dígitos repetidos, pois CPFs como 333.333.333-33 e 444.444.444-44 passam na verificação dos dígitos mas não são considerados válidos. Escreva uma função que descubra se o vetor tem ou não todos os elementos repetidos.

Primeira solução (não "preguiçosa") aqui.

Solução melhorada ("preguiçosa") aqui.

5) Vamos melhorar mais ainda o código cpf3.c acrescentando agora um procedimento (uma função que nada retorna) para informar (imprimir na tela) o estado de origem do CPF, com base no seu nono dígito (ou seu ante-penúltimo dígito):

    * 0 Rio Grande do Sul
    * 1 Distrito Federal, Goiás, Mato Grosso, Mato Grosso do Sul e Tocantins
    * 2 Amazonas, Pará, Roraima, Amapá, Acre e Rondônia
    * 3 Ceará, Maranhão e Piauí
    * 4 Paraíba, Pernambuco, Alagoas e Rio Grande do Norte
    * 5 Bahia e Sergipe
    * 6 Minas Gerais
    * 7 Rio de Janeiro e Espírito Santo
    * 8 São Paulo
    * 9 Paraná e Santa Catarina

(Essa informação está no site: http://verificador.blogspot.com.br/p/cpf-validacao.html)

Uma resposta simples, usando procedimento, pode ser vista aqui. Uma outra versão, usando matrizes está aqui.


6)  Vamos melhorar mais ainda o código, trabalhando na nova entrada dos dígitos do CPF. Vamos lê-los com uma string e processá-la adequadamente. Usando o conhecimento de que cada caractere é representado internamente por um número que corresponde ao seu código ASCII, podemos convertê-lo facilmente para o correspondente numérico:


Código ASCII Caractere Correspondente (número)

48 '0' 0
49 '1' 1
50 '2'
51 '3' 3
52 '4' 4
53 '5' 5
54 '6' 6
55 '7' 7
56 '8' 8
57 '9' 9


Todo outro caractere presente na digitação deve ser ignorado, como '.' (ponto), '-' (hífen) e ' ' (espaço).

Último detalhe: o CPF pode ter menos de 11 dígitos e ainda ser válido. Assim, este procedimento deverá deixar zeros à esquerda para completar os 11 dígitos; caso contrário, o algoritmo de validação falhará.

Dicas: observe os vários códigos a seguir; eles trazem pistas sobre como proceder:

Código 1

Código 2

Código 3

Código 4

Este código está funcional.

Aqui há uma discussão sobre o porquê que não deveríamos usar gets.

Nossa versão final.


***Última versão feita em aula (09/03/2021, turma da tarde):  https://onlinegdb.com/HkHqHDHQd

***Última versão feita em aula (20/03/2021, turma da noite):  https://onlinegdb.com/SJuWI_74_

Comentários

Postagens mais visitadas deste blog