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.
- //VALIDADOR CPF.
- #include <stdio.h>
- int main()
- {
- char cpf[12];
- int icpf[12];
- int i,somador=0,digito1,result1,result2,digito2,valor;
- printf("Digite o cpf: ");
- scanf(" %s",cpf);
- //Efetua a conversao de array de char para um array de int.
- for(i=0;i<11;i++)
- {
- icpf[i]=cpf[i]-48;
- }
- //PRIMEIRO DIGITO.
- for(i=0;i<9;i++)
- {
- somador+=icpf[i]*(10-i);
- }
- result1=somador%11;
- if( (result1==0) || (result1==1) )
- {
- digito1=0;
- }
- else
- {
- digito1 = 11-result1;
- }
- //SEGUNDO DIGITO.
- somador=0;
- for(i=0;i<10;i++)
- {
- somador+=icpf[i]*(11-i);
- }
- valor=(somador/11)*11;
- result2=somador-valor;
- if( (result2==0) || (result2==1) )
- {
- digito2=0;
- }
- else
- {
- digito2=11-result2;
- }
- //RESULTADOS DA VALIDACAO.
- if((digito1==icpf[9]) && (digito2==icpf[10]))
- {
- printf("\nCPF VALIDADO.\n");
- }
- else
- {
- printf("Problema com os digitos.\n");
- }
- return 0;
- }