|
Hoje é Dom Set 05, 2010 1:15 am
|
Ver mensagens sem resposta | Ver tópicos ativos
|
|
Página 1 de 1
|
[ 9 Mensagens ] |
|
| Autor |
Mensagem |
|
Inácio Alves
Site Admin
Data de registro: Seg Abr 20, 2009 7:03 pm Mensagens: 8
|
 Validando um CPF
Sabendo que um CPF consiste de 11 dígitos(entre 0 e 9) e que os dois últimos são calculados, pretende-se escrever um programa em Linguagem C para validar um CPF. Para tanto, deve-se executar os seguintes cálculos Etapa 1: Código: D1 = d1+2*d2+3*d3+4*d4+5*d5+6*d6+7*d7+8*d8+9*d9
onde cada di representa um dígito do CPF contado da esquerda para a direita. Feito isto, deve-se calcular o resto da divisão de D1 por 11. Se tal resto for igual a 10 então deve-se considerá-lo como sendo 0(zero). Se este valor for igual a d10 então prosseguimos para a próxima etapa, do contrário o CPF NÃO é válido. Etapa 2: Código: D2 = d2+2*d3+3*d4+4*d5+5*d6+6*d7+7*d8+8*d9+9*d10
Seguindo o mesmo raciocínio de antes. Deve-se comparar D2 com d10. Se houver igualdade então o CPF é válido, do contrário tal CPF NÃO é válido. Como fica tal programa?
|
| Seg Abr 20, 2009 8:01 pm |
|
 |
|
Inácio Alves
Site Admin
Data de registro: Seg Abr 20, 2009 7:03 pm Mensagens: 8
|
 Re: Validando um CPF
Considere que cpf é uma variável inteira e seja aux outra variável, também inteira que usaremos para nos auxiliar no processo de obter os dígitos do cpf. Podemos então proceder assim: Código: d11 = aux % 10; aux = aux / 10; d10 = aux % 10; aux = aux / 10; d9 = aux % 10; aux = aux / 10; ...
Com isto é possível obter todos os dígitos do CPF.
|
| Sáb Abr 25, 2009 10:15 am |
|
 |
|
Inácio Alves
Site Admin
Data de registro: Seg Abr 20, 2009 7:03 pm Mensagens: 8
|
 Re: Validando um CPF
Recebi o seguinte código por email Código: #include int main(){ int cpf,aux,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,D1,D2; /*d1d2d3d4d5d6d7d8d9d10d11*/ cpf=aux; d11=aux%10; aux=aux/10; d10=aux%10; aux=aux/10; d9=aux%10; aux=aux/10; d8=aux%10; aux=aux/10; d7=aux%10; aux=aux/10; d6=aux%10; aux=aux/10; d5=aux%10; aux=aux/10; d4=aux%10; aux=aux/10; d3=aux%10; aux=aux/10; d2=aux%10; aux=aux/10; d1=aux%10; D1=d1+2*d2+3*d3+4*d4+5*d5+6*d6+7*d7+8*d8+9*d9; D2=d2+2*d3+3*d4+4*d5+5*d6+6*d7+7*d8+8*d9+9*d10; printf(\"Escreva seu numero do CPF (completo e sem traco) para verificarmos se ele eh valido\\n\"); scanf(\"%d\",&cpf); if(d10==D1%11 && d11==D2%11) { printf(\"Seu CPF eh valido!\"); } else{ printf(\"Seu CPF eh invalido!\"); } getch(); return 0; }
Fiquem a vontade para comentar os erros que encontrarem.
|
| Sáb Mai 02, 2009 10:39 am |
|
 |
|
manel
Data de registro: Sáb Mai 02, 2009 1:03 pm Mensagens: 1
|
 Re: Validando um CPF
Tá ai o meu código: #include<stdio.h>
int main() { unsigned long int cpf; int resto,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,D1,D2; printf("Escreva seu numero do CPF (completo e sem traco) para verificarmos se ele eh valido\n"); scanf("%lu",&cpf); printf("%lu\n",cpf); d11=cpf%10; cpf=cpf/10; d10=cpf%10; cpf=cpf/10; d9=cpf%10; cpf=cpf/10; d8=cpf%10; cpf=cpf/10; d7=cpf%10; cpf=cpf/10; d6=cpf%10; cpf=cpf/10; d5=cpf%10; cpf=cpf/10; d4=cpf%10; cpf=cpf/10; d3=cpf%10; cpf=cpf/10; d2=cpf%10; cpf=cpf/10; d1=cpf%10; printf("%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld",d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11); D1=d1+2*d2+3*d3+4*d4+5*d5+6*d6+7*d7+8*d8+9*d9; resto=D1%11; if(resto==10){ resto=0; } if(resto==d10){ D2=d2+2*d3+3*d4+4*d5+5*d6+6*d7+7*d8+8*d9+9*d10; resto=D2%11; if(resto==10){ resto=0; } if(resto==d11){ printf("\nCPF valido"); } } else{ printf("\nCPF invalido"); } getch(); return 0; }
Entretanto ele só funciona para numeros menores do que 4.294.967.295, pois é o que um unsigned long int suporta. Como resolvo isso?
|
| Sáb Mai 02, 2009 1:09 pm |
|
 |
|
Inácio Alves
Site Admin
Data de registro: Seg Abr 20, 2009 7:03 pm Mensagens: 8
|
 Re: Validando um CPF
Você pode usar uma variável para o cpf(os 9 primeiros dígitos) e uma para armazenar os dois dígitos separados.
|
| Sáb Mai 02, 2009 5:02 pm |
|
 |
|
Daniel Braquehais
Data de registro: Sex Mai 01, 2009 10:29 pm Mensagens: 2
|
 Re: Validando um CPF
Taqui, pessoal. Consegui:
#include <stdio.h> int main() { long int cpf; int aux,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,D1,D2; printf ("Digite seu CPF para verificarmos se ele eh valido.\n Obs.:coloque os dois ultimos digitos separados dos anteriores por espaco.\n"); scanf ("%ld%d",&cpf,&aux); d11=aux%10; d10=aux/10; d9=cpf%10; cpf=cpf/10; d8=cpf%10; cpf=cpf/10; d7=cpf%10; cpf=cpf/10; d6=cpf%10; cpf=cpf/10; d5=cpf%10; cpf=cpf/10; d4=cpf%10; cpf=cpf/10; d3=cpf%10; cpf=cpf/10; d2=cpf%10; d1=cpf/10; D1=(d1+2*d2+3*d3+4*d4+5*d5+6*d6+7*d7+8*d8+9*d9)%11; D1=D1%10; D2=(d2+2*d3+3*d4+4*d5+5*d6+6*d7+7*d8+8*d9+9*d10)%11; D2=D2%10; if(d10==D1&&d11==D2){ printf("Seu CPF eh valido."); } else{ printf("Seu CPF eh invalido."); } getch(); return 0; }
|
| Dom Mai 03, 2009 5:13 pm |
|
 |
|
Inácio Alves
Site Admin
Data de registro: Seg Abr 20, 2009 7:03 pm Mensagens: 8
|
 Re: Validando um CPF
Testem o código com o seguinte CPF fictício 84164253703 Ele satisfaz as contas do cálculo.
|
| Dom Mai 03, 2009 6:16 pm |
|
 |
|
Daniel Braquehais
Data de registro: Sex Mai 01, 2009 10:29 pm Mensagens: 2
|
 Re: Validando um CPF
Testei, e deu certo. "Seu CPF eh valido."
|
| Dom Mai 03, 2009 7:02 pm |
|
 |
|
franco
Data de registro: Qui Mai 14, 2009 8:11 pm Mensagens: 2
|
 Re: Validando um CPF
usando o 'for':
#include <stdio.h>
int n, i, f, d[10], D1, D2;
main(){ printf ("Digite seu cpf COM hifen\n"); scanf ("%d-%d", &n, &f); d[11]=f%10; d[10]=f/10; for (i=9;i>=1;i--){ d[i]=n%10; n=n/10; } D1=(d[1]+2*d[2]+3*d[3]+4*d[4]+5*d[5]+6*d[6]+7*d[7]+8*d[8]+9*d[9])%11; D2=(d[2]+2*d[3]+3*d[4]+4*d[5]+5*d[6]+6*d[7]+7*d[8]+8*d[9]+9*d[10])%11; if (D1==10) D1=0; if (D2==10) D2=0; if (d[10]==D1 && d[11]==D2) printf ("CPF valido"); else printf ("CPF invalido"); getch(); return 0; }
Último pulo porInácio Alves no Sáb Ago 15, 2009 11:30 am
|
| Sáb Ago 15, 2009 11:30 am |
|
 |
|
|
|
Página 1 de 1
|
[ 9 Mensagens ] |
|
Quem está online |
Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante |
|
Você não pode criar novos tópicos neste fórum Você não pode responder tópicos neste fórum Você não pode editar suas mensagens neste fórum Você não pode excluir suas mensagens neste fórum Você não pode enviar anexos neste fórum
|
|