Código para Validar CPF

13. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 02/05/2013 - 20:10h

prmjunior escreveu:

você usou scanf("%s", &cpf)

mas o cpf é um vetor de inteiros. o %s serve para ler uma string, ou seja um vetor de char. eu usaria cpf como um vetor de char


Fiz como você disse, usei vetor de char, só que tinha esquecido de toda string por padrão tem um byte nulo no fim, logo, tive que aumentar o vetor cpf para 12 posições. Ai deu certo, mas eu não entendi ainda aquele casting de -48!


  


14. Re: Código para Validar CPF

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 03/05/2013 - 09:55h

veja a tabela ascii.

para qualquer char você vai encontrar um valor decimal

a letra '0' tem valor decimal 48, então


char c = '0';
int i = c;

// i é 48, mas n é isso que eu preciso então eu tiro 48 para ajustar o valor

i = c - 48;

// i é 0



o mesmo vale para os outros:

na tabela ascii a letra '9' vale 57, 57 - 48 = 9








15. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 03/05/2013 - 18:34h

prmjunior escreveu:

veja a tabela ascii.

para qualquer char você vai encontrar um valor decimal

a letra '0' tem valor decimal 48, então


char c = '0';
int i = c;

// i é 48, mas n é isso que eu preciso então eu tiro 48 para ajustar o valor

i = c - 48;

// i é 0



o mesmo vale para os outros:

na tabela ascii a letra '9' vale 57, 57 - 48 = 9






Muito obrigado, então, sempre que for trabalhar com char e int, e realizar calculos entre eles, preciso fazer este casting, existe alguma função que já faça isso? ou sempre terei que colocar o -48?

Obrigado!




16. Re: Código para Validar CPF

Daniel Marchi
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");
}




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts