Gerador de CPF
Kero avisar que eu num tenhu nada haver o que vc vai fazer com essas informacoes,
eh apenas educativo...!!!
Para criar um programa de geração de cpf,
temos que saber como funciona o cpf:
o CPF é composto por 11 dígitos desse modo:
123.456.789-00
Os dois últimos dígitos são os dígitos verificadores,
que é justamente onde programas e sites de internet verificam se o cpf é válido
ou não. O nosso programinha vai ter que gerar justamente esses dígitos
a partir dos dígitos anteriores gerados
Para gerar o primeiro dígitos verificador, vamos pegar o primeiro número
do cpf
gerado e multiplicarmos ele por 1, o segundo por 2 e assim por diante. Vamos
pegar esse exemplo: 683.275.420. Então ficaria assim:
6*1=6
8*2=16
3*3=9
2*4=8
7*5=35
5*6=30
4*7=28
2*8=16
0*9=0
Depois de multiplicarmos os números, iremos somar todos os seus resultados,
então 6+16+9+8+35+30+28+16+0=148.
Calma, quase acabando... Vamos pegar esse valor, 148 e iremos
dividir por 11, mais o que vai nos interessar é o resto da divisao...
Dividindo 148 por 11 o resultado dá 13 e resto 5, então o nosso
primeiro dígitos verificador é o 5
Para o segundo dígito é kuase a mesma coisa, só que com
um único detalhe, a multiplicação começa por 0
e vai até o dígito verificador recém criado, ficando
assim:
6*0=0
8*1=8
3*2=6
2*3=6
7*4=28
5*5=25
4*6=24
2*7=14
0*8=0
5*9=45 <--------- o dígito recém criado
Faremos agora como funciona na programacao
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
class CPF
{
char *num;
public:
CPF(){ num = new char[12]; }
int GetNum();
void Print();
};
int CPF::GetNum()
{
int Valor , Fator, Resto1, Dig1, i;
int Soma2 , Divisao2, Resto2, Dig2;
Valor = 0;
scanf( "%11s", num );
/* PRIMEIRO DIGITO VERIFICADOR */
for( i=0; i<9; i++ )
Valor += (num - 48) * (10 - i);
Fator = (Valor/11);
Fator *= 11;
Valor = Valor - Fator;
// Se Valor igual a 0 ou 1 Dig1 recebe 0 senao
// Dig1 recebe 11-Dig1
Dig1 = Valor < 2 ? 0 : 11-Valor;
Valor = 0;
/* SEGUNDO DIGITO VERIFICADOR */
for( i=0; i<9; i++ )
Valor += (num - 48) * (11-i);
Valor += Dig1 * 2;
Fator = (Valor/11);
Fator *= 11;
Valor = Valor - Fator;
// Se Valor igual a 0 ou 1 Dig2 recebe 0 senao
// Dig2 recebe 11-Dig2
Dig2 = Valor < 2 ? 0 : 11-Valor;
return Dig1==(num[9] - 48) && Dig2==(num[10] - 48)
? 0 : Dig1*10+Dig2;
}
void CPF::Print()
{ printf(num); }
void main()
{
clrscr();
CPF n;
int ret;
char str[3], buffer[20];
if( ret=n.GetNum() )
{
printf("\nN£mero inv lido");
itoa(ret,str,10);
sprintf(buffer, "\nValidaria com: %s", str);
puts(buffer);
}
else
printf("\nN£mero V lido");
getch();
}