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 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):
* 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)
49 '1' 1
50 '2' 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:
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
Postar um comentário