DMS_
(usa elementary OS)
Enviado em 03/05/2013 - 20:14h
Bom, consegui desenvolver este código porco, da pra otimizar muita coisa, usei uma quantidade absurda (da qual tenho vergonha) de variáveis, mas foi isso que consegui por enquanto; Criticas construtivas são bem vindas. vlw
#include <stdio.h>
#include <math.h>
int main()
{
int digito1;
int digito2;
int resto;
int total=0;
int i;
int vetMult[9];
int vet[9] = {10, 9, 8, 7, 6, 5, 4, 3, 2};
int vet2[10] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
char cpf[12];
int cpfDig[2];
//digitando o CPF a ser validado e informando o CPF digitado
printf("Por favor, digite o seu cpf\n");
scanf("%12[^\n]d", cpf);
// scanf("%s", &cpf);
printf("\nCPF digitado: %s\n", cpf);
//armazenando os digitos verificadores em um vetor separado
cpfDig[0]=cpf[9]-48;
cpfDig[1]=cpf[10]-48;
//multiplicandos os valores do cpf[9] pelo vet[9]
for (i=0; i<9; i++)
{
vetMult[i]=(cpf[i]-48)*vet[i];
total= total+vetMult[i];
}
//Coletando o resto da divisão do total da soma das posições multiplicadas
resto=(total%11);
//determinando o primeiro digito verificador: digito1
if (resto<2) digito1=0;
else digito1=11-resto;
//zerando o total para verificar o segundo digito
total = 0;
for (i=0; i<10; i++)
{
vetMult[i]=(cpf[i]-48)*vet2[i];
total= total+vetMult[i];
}
resto=(total%11);
if (resto<2) digito2=0;
else digito2=11-resto;
if( cpfDig[0]==digito1 && cpfDig[1]==digito2) printf("Este CPF é valido\n");
else printf("Este CPF é Invalido\n");
}