Validação de CPF em C

CPF

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.

Imagem da validação do primeiro digito.

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.

Imagem da validação do primeiro digito.

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;
}

Bons estudos.

Textos Relacionados:

Deixe um Comentário

5 Comentários.

  1. Validação de CNPJ em C | 0fx66 - pingback on 13 de Julho de 2010 em 11:12
  2. Ok, muito bom!
    Informacões relevantes e fáceis de entender, parabéns.
    Porém, faltou falar que no 2o. dígito, deve ser levado em conta o primeiro dígito, e o peso dele na soma é 2.

    Assim, os pesos para o 1o. dígito são: 10, 9, 8, 7, 6, 5, 4, 3 e 2. Para o segundo dígito: 11, 10, 9, 8, 7, 6, 5, 4, 3 e 2.

  3. Em relação ao segundo dígito verificador, o Márcio Jr. está realmente correto. Você precisa somar o primeiro digito verificador com peso 2. A wikipedia mostra isso: http://pt.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas

Deixe um Comentário

Trackbacks e Pingbacks:

SEO Powered by Platinum SEO from Techblissonline