Ir para conteúdo
Fórum Script Brasil
  • 0

hugozanini

Pergunta

Fala galera!

Estou tentando criar um programa em C para descobrir o dígito verificador do CPF. Mas, o programa não funciona. Aparentemente todos os dados estão corretos, mas quando o executo as operações matematicas que eu mandei fazer não ocorrem do jeito esperado, dando um resultado diferente do ideal.
Segue abaixo as instruções para descobrir os digitos verificadores e posteriormente as minhas linhas de códigos, estou programando no Code Blocks, conto com a ajuda de vocês.
Obrigado.


Regras para o cálculo dos dígitos verificadores do CPF
É utilizado como exemplo o número: 123456789.



  • Calcule a soma dos produtos dos nove digitos utilizando peso dois para unidade, peso 3 para dezena, peso 4 para centena e assim sucessivamente. Exemplo:
    9*2+8*3+7*4+6*5+5*6+4*7+3*8+2*9+1*10 = 210


  • A dezena do número verificador é 0 caso o resto da divisão por 11 da soma dos produtos seja 0 ou 1; caso contrario a dezena corresponde a subtrair de 11 o resto da divisão por 11 da soma dos produtos. Exemplo:

resto da divisão de 210 por 11 é 1 então a dezena do número verificador é 0.

  • Calcule a soma dos produtos dos dez digitos, onde o digito menos significativo passa a ser a dezena dos digitos verificadores, utilizando os seguintes pesos: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11; Exemplo:

2*0+3*9+4*8+5*7+6*6+7*5+8*4+9*3+10*2+11*1=255.

  • A unidade do número verificador é 0 caso o resto da divisão da soma dos produtos seja 0 ou 1; caso contrário a unidade corresponde a 11 menos o resto da divisão por 11 da soma dos produtos.Exemplo:

resto da divisão de 255 por 11 é 2 então a unidade do número verificador é 11-2=9.





--> PROGRAMA



#include <stdio.h>

#include <stdlib.h>



int main()

{

int somaeprod;

int resultado;

int mult2;

int mult3;

int mult4;

int mult5;

printf("Forneca os 9 digitos do CPF:");

char d1,d2,d3,d4,d5,d6,d7,d8,d9;

scanf("%c%c%c%c%c%c%c%c%c",&d9,&d8,&d7,&d6,&d5,&d4,&d3,&d2,&d1);

somaeprod= (d1*2)+(d2*3)+(d3*4)+(d4*5)+(d5*6)+(d6*7)+(d7*8)+(d8*9)+(d9*10);

resultado= somaeprod%11;



if (resultado <2){

mult2= (resultado*2)+(d1*3)+(d2*4)+(d3*5)+(d4*6)+(d5*7)+(d6*8)+(d7*9)+(d8*10)+(d9*11);

mult3= mult2%11;

if (mult3 <2){

printf("%c%c%c%c%c%c%c%c%c %d%d",d9,d8,d7,d6,d5,d4,d3,d2,d1, resultado, mult3); }

else {

mult4= 11-mult3;

printf("%c%c%c%c%c%c%c%c%c %d%d",d9,d8,d7,d6,d5,d4,d3,d2,d1, resultado, mult4);

}

}



else {

mult2= 11-resultado;

mult3= (2*mult2)+(3*d1)+(4*d2)+(5*d3)+(6*d4)+(7*d5)+(8*d6)+(9*d7)+(10*d8)+(11*d9);

mult4 = mult3%11;

if ( mult4<2 ) {

printf("%c%c%c%c%c%c%c%c%c %d%d",d9,d8,d7,d6,d5,d4,d3,d2,d1, mult2, mult4);

}

else{

mult5= 11-mult4;

printf ("%c%c%c%c%c%c%c%c%c %d%d",d9,d8,d7,d6,d5,d4,d3,d2,d1, mult2, mult5);

}}



system("pause");





}
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Cara, eu já tinha feito um programa parecido com esse, mas ao invés do usuario inserir os numeros os numeros eram randomizados

segue o codigo:

/*GERADOR CPF com funções*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
#define NSALT 9
#define t_CPF 11
#define PESO_INC 10

int rnd_cpf (int v[])
{
	long long ultime, j;
	time (&ultime);
	srand ((unsigned)ultime);
	for (j=0; j<NSALT; j++)
		v[j] = rand()%10;
}
int calc_digt (int v[], int peso, int n_elem)
{
	int i, j, k, soma, valor = 0;
	for (i = 0, j =peso, k = n_elem; i <k; i ++, j--)
		valor += v[i]*peso;
	j = valor%11;
	if (j <2)
		v[n_elem] = 0;
	else
		v[n_elem] = 11-j;
}
main ()
{
	int cpf[t_CPF], i, j, k, resp;
	for (resp = 1; resp == 1; resp ++)
	{
		puts ("GERADOR DE CPF'S");
		puts ("----------------\n");
		puts ("");
		puts ("1-		GERAR");
		puts ("0-		SAIR");
		printf ("------------> ");
		fflush (stdin);
		scanf ("%d", &resp);
	 if (resp == 1)
		{
			rnd_cpf (cpf);
			for (i = 1, j = PESO_INC, k = NSALT; i <=2; i++, j++, k++)
				calc_digt (cpf, j, k);
			puts (" --------------------- ");
			std :: cout <<"| CPF: "<<cpf[0]<<cpf[1]<<cpf[2]<<"."<<cpf[3]<<cpf[4]<<cpf[5]<<"."<<cpf[6]<<cpf[7]<<cpf[8]<<"-"<<cpf[9]<<cpf[10]<<" |\n";
			puts (" --------------------- ");
			puts ("");
			system ("pause");
			system ("cls");
			resp =0;
		}
		else if (resp == 0)
			break;
		else
		{
			do
			{
				puts ("Opcao incorreta... tecle 1 para reiniciar");
				printf ("------------> ");
				scanf ("%d", &resp);
			} while ((resp != 1) && (resp != 0));
			if (resp == 1)
				system ("cls");
			resp --;
		}
	}
}

para fazer do seu jeito (onde o usuario digita os 9 primeiros numeros), você pode retirar o "#include <time.h>" e a função "int rnd_cpf (int v[])", pois você não vai precisar randomizar os numeros, subistitua essa função por uma que leia os 9 numeros e os coloque dentro de um vetor, e substitua os "rnd_cpf (cpf)" pela função que você criar;

um exemplo de uma função que pode funcionar é:

void intr_cpf (int *v)
{
	int j;
	for (j=0, j<9; j++)
		scanf("%d", &v[j]);
}

Boa Sorte!!, se ainda não tiver resolvido

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...