Código para Validar CPF

1. Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 01/05/2013 - 21:48h

Boa Noite, estou tentando fazer um código pra validar CPF, até ai tudo bem, nesta minha primeira etapa quero digitar o CPF completo com 11 digitos, em seguida informar o cpf digitado e armazenar os dois ultimos digitos em um vetor e mostrar na tela estes dois ultimos digitos. Estou com o erro na hora de imprimir os dois ultimos digitos, creio que estou usando o argumento errado "%d" ele imprimi um numero totalmente diferente, "%c" ele não imprimir nada, "%s" ele informa segmentation fault.

#include <stdio.h>
#include <math.h>

int main()
{

int vet[9] = {10, 9, 8, 7, 6, 5, 4, 3, 2};
int cpf[10];
int cpfDig[2];

//digitando o CPF a ser validado e informando o CPF digitado
printf("Por favor, digite o seu cpf\n");
scanf("%11[^\n]d", cpf);
printf("\nCPF digitado: %s\n", cpf);

//armazenando os digitos verificadores em um vetor separado
cpfDig[0]=cpf[8];
cpfDig[1]=cpf[9];


//o erro acontece nestas duas linhas abaixo.
printf("\nO primeiro digito verificador é : %c\n", cpfDig[0]);
printf("\nO segundo digito verificador é : %c\n", cpfDig[1]);


}



  


2. Re: Código para Validar CPF

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 01/05/2013 - 22:44h

tente declarar cpf[11]


3. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 01/05/2013 - 22:56h

prmjunior escreveu:

tente declarar cpf[11]


Da na mesma...


4. Re: Código para Validar CPF

wellington
wellingtonsr

(usa Slackware)

Enviado em 01/05/2013 - 23:03h

Tente isso:


char cpf[11];
char cpfDig[2];



5. Re: Código para Validar CPF

Fernando
phoemur

(usa Debian)

Enviado em 01/05/2013 - 23:14h

Eu fiz um código simples no mês passado, se quiser dar uma olhada:

http://www.vivaolinux.com.br/script/Validar-CPF-em-C-esse-funciona

Está funcionando direitinho...


6. Re: Código para Validar CPF

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 01/05/2013 - 23:31h

fiz algumas alterações no seu codigo e assim funciona. se ficar com duvida pode perguntar


#include <stdio.h>
#include <math.h>

int main()
{

int vet[9] = {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("%s", &cpf);
printf("\nCPF digitado: %s", cpf);

//armazenando os digitos verificadores em um vetor separado
cpfDig[0]=cpf[9] - 48;
cpfDig[1]=cpf[10] - 48;


//o erro acontece nestas duas linhas abaixo.
printf("\nO primeiro digito verificador é : %d\n", cpfDig[0]);
printf("\nO segundo digito verificador é : %d\n", cpfDig[1]);

}




7. Re: Código para Validar CPF

Fernando
phoemur

(usa Debian)

Enviado em 01/05/2013 - 23:36h

cpfDig[0] é inteiro e cpf[9]é char, você não está fazendo o casting da conversão, será que não pode ser isso?

experimenta:

cpfDig[0]=(int)cpf[9] - 48;
cpfDig[1]=(int)cpf[10] - 48;

(Edit: o colega já resolveu...)


8. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 02/05/2013 - 14:53h

Legal, agradeço a todos, hj a tarde irei tentar os respectivos conselhos, quanto ao código pronto, não queria olhar não, se não fica fácil, quero tentar fazer do 0 mesmo, mas obrigado mesmo assim.

[]'s


9. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 02/05/2013 - 17:43h

prmjunior escreveu:

fiz algumas alterações no seu codigo e assim funciona. se ficar com duvida pode perguntar


#include <stdio.h>
#include <math.h>

int main()
{

int vet[9] = {10, 9, 8, 7, 6, 5, 4, 3, 2};
char cpf[12]; //Por que precisa ser Char e não int?, mais pra frente vou precisar multiplicar esses valores com o vet[9], não vai dar problema?
int cpfDig[2];

//digitando o CPF a ser validado e informando o CPF digitado
printf("Por favor, digite o seu cpf\n");
scanf("%s", &cpf);
printf("\nCPF digitado: %s", cpf);

//armazenando os digitos verificadores em um vetor separado
cpfDig[0]=cpf[9] - 48; //Por que colocou - 48 nessas duas linhas, não entendi
cpfDig[1]=cpf[10] - 48;


//o erro acontece nestas duas linhas abaixo.
printf("\nO primeiro digito verificador é : %d\n", cpfDig[0]);
printf("\nO segundo digito verificador é : %d\n", cpfDig[1]);

}


Fiz alguns comentários no código acima.
Por que o Char cpf[12] e não cpf[11] se o cpf possui 11 digitos?

E logo abaixo, por que -48? Sinceramente não entendi /s

cpfDig[0]=cpf[9] - 48;
cpfDig[1]=cpf[10] - 48;




10. Re: Código para Validar CPF

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 02/05/2013 - 19:57h

DMS_ escreveu:


Fiz alguns comentários no código acima.
Por que o Char cpf[12] e não cpf[11] se o cpf possui 11 digitos?

E logo abaixo, por que -48? Sinceramente não entendi /s

cpfDig[0]=cpf[9] - 48;
cpfDig[1]=cpf[10] - 48;



eae cara, assim:

usei tamanho 12 porque (se n estou enganado) o scanf le tudo que é digitado, nesse caso 11 char's para o cpf mais o 'enter'.

O (cpf[9] - 48) digamos que seja uma conversão para inteiro. se um char for colocado em uma variavel inteira ela fica com o numero decimal correspondente a essa char na tabela ascii:

veja a tabela: http://pt.wikipedia.org/wiki/ASCII

o char 0(zero) tem o numero decimal igual a 48 na tabela ascii
o char 9 tem o numero decimal igual a 57 na tabela ascii

ex. quando o char é 9 o valor que vai para inteiro é 57, então:


cpfDig[0] = 57 - 48;




11. Re: Código para Validar CPF

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 02/05/2013 - 19:59h

Boa Noite pessoal,

Eu já declarei o vetor cpf e atribui um cpf, fazendo desse jeito, eu consigo chegar ao primeiro digito verificador, agora se eu altero, e deixo para o usuário inserir o CPF, tenho várias problemas, os números informados não batem fica uma zona!

Comentei a linha em que o usuário insere o CPF, pois quando ela está ativa, os número são impressos totalmente errado, é algo com formato de exibição, enfim, não consigo resolver isso, somente deste modo deu certo, declarando o cpf de início, como feito no vetor cpf[11]


#include <stdio.h>
#include <math.h>

int main()
{
int digito1;
int resto;
int total=0;
int i;
int vetMult[9];
int vet[9] = {10, 9, 8, 7, 6, 5, 4, 3, 2};
int cpf[11]= {2, 2, 2, 3, 3, 3, 6, 6, 6, 3, 8};
int cpfDig[2];


//digitando o CPF a ser validado e informando o CPF digitado
printf("Por favor, digite o seu cpf\n");
// scanf("%s", &cpf);
printf("\nCPF digitado: %c\n", cpf);

//armazenando os digitos verificadores em um vetor separado
cpfDig[0]=cpf[9];
cpfDig[1]=cpf[10];

printf("\nO primeiro digito verificador é : %d\n", cpfDig[0]);
printf("\nO segundo digito verificador é : %d\n\n", cpfDig[1]);

//multiplicandos os valores do cpf[9] pelo vet[9]
for (i=0; i<9; i++)
{
printf("%d x %d = ", cpf[i], vet[i]);
vetMult[i]=(cpf[i])*vet[i];
printf("%d\n", vetMult[i]);
total= total+vetMult[i];
printf("O total é: %d\n", total);
}
printf("O Total da somas das posições é: %d\n", total);

//Coletando o resto da divisão do total da soma das posições multiplicadas
resto=(total%11);
printf("Resto é : %d\n", resto);

//determinando o primeiro digito verificador: digito1
if (resto<2) digito1=0;
else digito1=11-resto;

if (digito1==cpfDig[0]) {
printf("O primeiro digito está correto\n");
}
else printf("O primeiro digito está incorreto\n");
printf("O primeiro digito verificador é: %d\n", digito1);

}


@EDIT
Então pessoal eu consegui, o que acontece é o seguinte, declarando o vetor como char, por padrão a ultima posição é sempre um \o, logo, um vetor char de 12 posições, apenas 11 posições podem ser preenchidas em vista que por padrão a ultima é '\o' o byte nulo, feito isto tudo deu certo, claro tive que fazer aquele casting de -48, qual eu não entendi até agora


12. Re: Código para Validar CPF

Paulo Dias
di4s

(usa XUbuntu)

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

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



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts