Google

quinta-feira, 1 de abril de 2010

Programa que gera um CPF válido de acordo com a entrada informada


#include < stdio.h >
#include < string.h >
#include < stdlib.h >
//programa para gerar valores de CPF
//será informado os 9 numeros do CPF e será gerado o digito verificador desse cpf
//Números do CPF 2 2 2 3 3 3 6 6 6
//valores definidos para calculo 10 9 8 7 6 5 4 3 2
//multiplica os numeros das colunas
// 20 18 16 21 18 15 24 18 12
//em seguida somatorio (162) resultado % 11
//em seguida 11 - resto da divisao
//se o resto for menor q 2 o digito é ZERO

int main(int argc, char *argv[]){
char *cpf = NULL;
char aux1;
char aux2[2];
char cpf_int[11];

int somador = 0, i = 0, aux = 0, first = 0;
int valor_definido = 10;

if (argc > 1){
cpf = argv[1];
}else{
printf("./gerar_cpf \n");
return -1;
}

if (strlen(cpf) != 9 ){
printf("Deve ser informado apenas [9] digitos\n");
return -1;
}
for(i=0;i<9;i++){
aux1 = cpf[i];
sprintf(aux2,"%c", aux1);
aux = atoi(aux2);
somador += aux*valor_definido;
printf(" %d +=%d[%d] * %d \n", somador, aux, i, valor_definido);
valor_definido--;
cpf_int[i]=aux;
}
first = somador % 11;
printf("Mod first %d\n",first);
if(first < 2){
cpf_int[9] = 0;
}else{
cpf_int[9] = 11-first;

printf("digito 1: %d\n ",cpf_int[9]);
}
printf("Cpf com o primeiro digito");
for(i=0;i<10;i++){
printf("%d:",cpf_int[i]);
}
printf("\nCalculando o segundo Digito\n");
somador = 0;
valor_definido = 11;

for(i=0;i<10;i++){
aux = cpf_int[i];
somador += aux*valor_definido;
printf(" %d +=%d[%d] * %d \n", somador, aux, i, valor_definido);
valor_definido--;
}

first = somador % 11;
printf("Mod first %d\n",first);
if(first < 2){
cpf_int[10] = 0;
}else{
cpf_int[10] = 11-first;
printf("digito 2: %d\n ",cpf_int[10]);
}

for(i=0;i<11;i++){
printf("%d:",cpf_int[i]);
if(i==2)
printf(".");
if(i==5)
printf(".");
if(i==8)
printf("-");

}
printf("\nSomatório [%d]\n",somador);
printf("ALL rights for Marcos Rosendo Dalte\n");
return 1;
}

Postagens populares