Cria os dígitos verificadores para CPF

Publicado por Luis Eduardo Boiko Ferreira 22/03/2009 (última atualização em 16/02/2010)

[ Hits: 8.166 ]

Homepage: https://www.facebook.com/luiseduardo.boiko

Download 3898.cpf.c




Os CPFs possuem nove dígitos e dois dígitos verificadores. Os dígitos verificadores são calculados com base nos números do CPF, e servem, basicamente, para evitar falhas e erros de digitação, pois se o CPF digitado não bater com os dígitos verificadores, uma buzina irá tocar te dizendo que o CPF não é valido.

Tive que desenvolver este script rápido, portanto, certamente poderá ser reescrito de uma forma muito mais compacta do que a atual. Se alguém o modificar, poste as mudanças aqui.

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>

main()
{
int cpf, num1, num2, num3, num4, num5, num6, num7, num8, num9, ver1, ver2;
   int mun1,mun2,mun3,mun4,mun5,mun6,mun7,mun8,mun9,mun10,total,total2;
      printf("Digite os nove primeiros digitos do CPF:\n");
         scanf("%d",&cpf);
if((cpf/100000000)==0)
{
   num1=0;
   num2=(cpf/10000000)-(num1*10);
   num3=((cpf/1000000)-(((num1*10)+num2)*10));
   num4=((cpf/100000)-((((((num1*10)+num2)*10))+num3)*10));
   num5=((cpf/10000)-((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)));
   num6=((cpf/1000)-((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10);
   num7=((cpf/100)-((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10);
   num8=((cpf/10)-((((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10)+num7)*10);
   num9=(cpf-((((((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10)+num7)*10)+num8)*10);
}
else
   num1=cpf/100000000;
   num2=(cpf/10000000)-(num1*10);
   num3=((cpf/1000000)-(((num1*10)+num2)*10));
   num4=((cpf/100000)-((((((num1*10)+num2)*10))+num3)*10));
   num5=((cpf/10000)-((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)));
   num6=((cpf/1000)-((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10);
   num7=((cpf/100)-((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10);
   num8=((cpf/10)-((((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10)+num7)*10);
   num9=(cpf-((((((((((((((((((num1*10)+num2)*10))+num3)*10))+num4)*10)))+num5)*10)+num6)*10)+num7)*10)+num8)*10);

mun1=(num1*10);
mun2=(num2*9);
mun3=(num3*8);
mun4=(num4*7);
mun5=(num5*6);
mun6=(num6*5);
mun7=(num7*4);
mun8=(num8*3);
mun9=(num9*2);

total=mun1+mun2+mun3+mun4+mun5+mun6+mun7+mun8+mun9;
   printf("Total da soma antes do calculo de mod eh %d \n\n", total);
      ver1=(total%11);
         printf("Apos o calculo de Mod o DV 1 vale:%d \n\n", ver1);
if((ver1==0)||(ver1==1))
   ver1=0;
      else
         ver1=(11-ver1);

mun1=(num1*11);
mun2=(num2*10);
mun3=(num3*9);
mun4=(num4*8);
mun5=(num5*7);
mun6=(num6*6);
mun7=(num7*5);
mun8=(num8*4);
mun9=(num9*3);
mun10=(ver1*2);

total2=mun1+mun2+mun3+mun4+mun5+mun6+mun7+mun8+mun9+mun10;
   printf("Total da soma antes do calculo de mod eh %d \n\n", total2);
      ver2=(total2%11);
         printf("Apos o calculo de Mod o DV 2 vale:%d \n\n", ver2);
if((ver2==0)||(ver2==1))
   ver2=0;
      else
         ver2=(11-ver2);

printf("O primeiro digito verificador do cpf em questão eh:%d \n O segundo eh: %d \n", ver1, ver2);

}

Scripts recomendados

Estrutura de dados em C -> Fila Circular com operador módulo

Calcula média de notas do aluno

Crônometro Digital em CURSES

Cálculo do IMC

Converter graus Celsius em Fahrenheit e vice-versa


  

Comentários
[1] Comentário enviado por doradu em 18/02/2010 - 13:08h

como faz pra ver na tela o resultado?

[2] Comentário enviado por lestatwa em 18/02/2010 - 19:38h

O.o
Abre qualquer terminal, navega ateh a pasta onde vc salvou o script (ex: cd /home/seuusuario/Desktop) e executa o script
com os comandos

$gcc 3898.cpf.c -o cpf
$./cpf

I hope you enjoy


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts