Skip to content

Instantly share code, notes, and snippets.

@tarcisio-marinho
Created October 25, 2016 05:28
Show Gist options
  • Save tarcisio-marinho/656bdeeabacdb2f166d576ee5e1ba912 to your computer and use it in GitHub Desktop.
Save tarcisio-marinho/656bdeeabacdb2f166d576ee5e1ba912 to your computer and use it in GitHub Desktop.
Valida CPF
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#define tam 11
void preencher(char vet[]);
void digito1(char vet[], int primeiro[], int *verificador);
void digito2(char vet[], int segundo[], int *verificador2);
int valida(char vet[], int a, int b);
int main() {
int resp,continuar;
char cpf[tam];
int primeiro[9] = { 10,9,8,7,6,5,4,3,2 };
int segundo[10] = { 11,10,9,8,7,6,5,4,3,2 };
int a = 0, b = 0;
do {
printf("Preencha o cpf: ");
preencher(cpf);
digito1(cpf, primeiro, &a);
digito2(cpf, segundo, &b);
resp = valida(cpf, a, b);
if (resp == 0) {
printf("CPF invalido.\n");
}
else if (resp == 1) {
printf("CPF valido!!!\n");
}
else if (resp == -1) {
printf("Caracter invalido\n");
}
printf("Deseja continuar?(1/2)\n");
scanf("%d", &continuar);
} while (continuar==1);
system("pause");
return 0;
}
void preencher(char vet[]) {
int i, achou = 0;
for (i = 0; i < tam; i++) {
if (achou == 3 || achou == 6) {
printf(".");
}
if (achou == 9) {
printf("-");
}
vet[i] = _getche(); fflush(stdin);
if (vet[i] == 13) {
break;
}
achou++;
}
printf("\n");
}
void digito1(char vet[], int primeiro[], int *verificador1) {
int i, somador = 0, aux[9] = { 0 }, fim[9] = { 0 };
float resto;
for (i = 0; i < 9; i++) {
aux[i] = vet[i] - 48;
fim[i] = aux[i] * primeiro[i];
somador = somador + fim[i];
}
resto = somador % 11;
if (resto < 2) {
*verificador1 = 0;
}
else {
resto = 11 - resto;
*verificador1 = resto;
}
}
void digito2(char vet[], int segundo[], int *verificador2) {
int i, somador = 0, aux2[10] = { 0 }, fim[10] = { 0 };
float resto;
for (i = 0; i < 10; i++) {
aux2[i] = vet[i] - 48;
fim[i] = aux2[i] * segundo[i];
somador = somador + fim[i];
}
resto = somador % 11;
if (resto < 2) {
*verificador2 = 0;
}
else {
resto = 11 - resto;
*verificador2 = resto;
}
}
int valida(char vet[], int a, int b) {
int i;
for (i = 0; i < tam; i++) {
if (vet[i] < 48 || vet[i]>57) {
return -1;
}
}
if (((vet[9]-48) != a) && ((vet[10]-48) != b)) {
return 0;
}
else {
return 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment