Top Sertanejo

terça-feira, 29 de novembro de 2011

Validação de CPF em C usando vetor


A validação de CPF na linguagem C e uma dúvida bastante comum por parte dos iniciantes, neste artigo irei explicar passo a passo como ela e feita, e no final segue um código fonte para que possam estuda-lo e aprenderem.
O CPF tem obrigatoriamente 11 dígitos, então ele não deverá ter nem mais nem menos do que onze caracteres. O primeiro digito do cpf e resultado de uma aritmética bastante simples. Vamos pega o CPF 123456789-09 como exemplo.
Multiplicarem o primeiro digito por 10, o segundo por 9, o terceiro por 8 o quarto por 7, quinto por 6, sexto por 5, sétimo por 4, oitavo por 3 e nono por 2. Da mesma forma abaixo.

Após efetuamos as multiplicações somamos os resultados, neste caso obtemos: 210, calculamos o mod(o resto) da soma.
  • Caso o resultado seja igual a 1 ou 0, o primeiro digito verificador sera 0.
  • Caso o resultado contrário efetuamos a subtração, 11 – resultado. O resultado dessa subtração nos trara o digito validador.
Obtemos o primeiro digito validador :) agora vamos ao segundo digito, o processo e basicamente o mesmo!
Fazemos a mesma aritmética só que ao invés de começamos com 10 a aritmética, começamos com 11 e terminamos no 3.

Obteremos o resultado: 255, calculamos o mod de 255 por 11.
  • Caso o resultado seja igual a 1 ou 0, o primeiro digito verificador sera 0.
  • Caso o resultado contrário efetuamos a subtração, 11 – resultado, o resultado dessa subtração nos trara o digito validador.
Segue abaixo um código fonte da validação.
  1. //VALIDADOR CPF.  
  2.   
  3. #include <stdio.h>  
  4.   
  5. int main()  
  6. {  
  7. char cpf[12];  
  8. int icpf[12];  
  9. int i,somador=0,digito1,result1,result2,digito2,valor;  
  10.   
  11. printf("Digite o cpf: ");  
  12. scanf(" %s",cpf);  
  13.   
  14. //Efetua a conversao de array de char para um array de int.  
  15. for(i=0;i<11;i++)  
  16. {  
  17. icpf[i]=cpf[i]-48;  
  18. }  
  19.   
  20. //PRIMEIRO DIGITO.  
  21.   
  22. for(i=0;i<9;i++)  
  23. {  
  24. somador+=icpf[i]*(10-i);  
  25. }  
  26.   
  27. result1=somador%11;  
  28.   
  29. if( (result1==0) || (result1==1) )  
  30. {  
  31. digito1=0;  
  32. }  
  33.   
  34. else  
  35. {  
  36. digito1 = 11-result1;  
  37. }  
  38.   
  39. //SEGUNDO DIGITO.  
  40.   
  41. somador=0;  
  42.   
  43. for(i=0;i<10;i++)  
  44. {  
  45. somador+=icpf[i]*(11-i);  
  46. }  
  47.   
  48. valor=(somador/11)*11;  
  49. result2=somador-valor;  
  50.   
  51. if( (result2==0) || (result2==1) )  
  52. {  
  53. digito2=0;  
  54. }  
  55.   
  56. else  
  57. {  
  58. digito2=11-result2;  
  59. }  
  60.   
  61. //RESULTADOS DA VALIDACAO.  
  62.   
  63. if((digito1==icpf[9]) && (digito2==icpf[10]))  
  64. {  
  65. printf("\nCPF VALIDADO.\n");  
  66. }  
  67. else  
  68. {  
  69. printf("Problema com os digitos.\n");  
  70. }  
  71. return 0;  
  72. }