bcavalcante

Calcula_Dig_CPF

Oct 27th, 2021
894
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*Desafio para os fortes
  2. Dígito verificador ou algarismo de controle é um mecanismo de autenticação utilizado
  3. para verificar a validade e a autenticidade de um valor numérico, evitando dessa forma
  4. fraudes ou erros de transmissão ou digitação. Consiste em um ou mais algarismos
  5. acrescentados ao valor original e calculados a partir deste através de um determinado
  6. algoritmo. Números de documentos de identificação, de matrícula, cartões de crédito e
  7. quaisquer outros códigos numéricos que necessitem de maior segurança utilizam dígitos
  8. verificadores. Esse trabalho consiste em calcular o dígito verificador do CPF. Seu
  9. programa deve receber um cpf sem o dígito verificador do usuário e imprimir o CPF com
  10. o dígito verificador. Você pode usar o seu CPF e de parentes e colegas para testar o
  11. programa. A seguir, as regras para o cálculo do dígito verificador são definidas através
  12. de um exemplo. É utilizado como exemplo o número: 123456789.
  13.  
  14. Calcule a soma dos produtos dos nove dígitos utilizando peso 2 para unidade, peso 3 para
  15. dezena, peso 4 para centena e assim sucessivamente.  
  16. Exemplo: 9*2+8*3+7*4+6*5+5*6+4*7+3*8+2*9+1*10 = 210.
  17.  
  18. A dezena do número verificador é 0 caso o resto da divisão por 11 da soma dos produtos
  19. seja 0 ou 1; caso contrário a dezena corresponde  a subtrair de 11 o resto da divisão
  20. por 11 da soma dos produtos.
  21.  
  22. Calcule a soma dos produtos dos dez dígitos, onde o dígito menos significativo passa a
  23. ser a dezena dos dígitos verificadores, utilizando os seguintes pesos:
  24. 2, 3, 4, 5, 6, 7, 8, 9, 10, 11;
  25.  
  26. A unidade do número verificador é 0 caso o resto da divisão da soma dos produtos seja 0
  27. ou 1; caso contrário a unidade corresponde a 11 menos o resto da divisão por 11 da soma
  28. dos produtos. Exemplo: resto da divisão de 255 por 11 é 2 então a unidade do número
  29. verificador é 11-2=9
  30.  
  31. Dica: para resolver esse problema, você precisa aprender três conceitos que ainda não
  32. foram ensinados em sala de aula: leitura de dados a partir do teclado, resto da divisão
  33. entre dois números, e processamento condicional. Para o primeiro conceito, procure saber
  34. como funciona a função scanf, que é da biblioteca stdio.h. Para o segundo conceito,
  35. procure saber como funciona o operador %, ou mod. Por fim, e mais difícil que os conceitos
  36. anteriores, procure saber como funciona o comando if e else da linguagem C. O aprendizado
  37. de uma linguagem depende muito da sua iniciativa de correr atrás das soluções.
  38. Esse exercício é uma forma de incentivar a autodidática.
  39. */
  40.  
  41. #include <stdio.h>
  42. #include <math.h>
  43.  
  44. void main() {
  45.     long cpf, soma_p, d, u, r, cpf0, cpf1, cpf2, cpf3, cpf4, cpf5, cpf6, cpf7, cpf8, t1, t2;
  46.     printf("Informe os 9 primeiros digitos do seu CPF: ");
  47.     scanf("%ld", &cpf);
  48.  
  49.     if(cpf < 100000000){
  50.         cpf0 = 0;
  51.         cpf1 = cpf/10000000;
  52.         cpf2 = (cpf/1000000)%10;
  53.     } else {
  54.         cpf0 = cpf/100000000;
  55.         cpf1 = (cpf/10000000)%10;
  56.         cpf2 = (cpf/1000000)%10;
  57.     }
  58.     if(cpf < 10000000){
  59.         cpf0 = 0;
  60.         cpf1 = 0;
  61.         cpf2 = cpf/1000000;
  62.     } else {
  63.         cpf0 = cpf/100000000;
  64.         cpf1 = (cpf/10000000)%10;
  65.         cpf2 = (cpf/1000000)%10;
  66.     }
  67.     cpf3 = (cpf/100000)%10;
  68.     cpf4 = (cpf/10000)%10;
  69.     cpf5 = (cpf/1000)%10;
  70.     cpf6 = (cpf/100)%10;
  71.     cpf7 = (cpf/10)%10;
  72.     cpf8 = cpf%10;
  73.     soma_p = (cpf8*2)+(cpf7*3)+(cpf6*4)+(cpf5*5)+(cpf4*6)+(cpf3*7)+(cpf2*8)+(cpf1*9)+(cpf0*10);
  74.     r = soma_p%11;
  75.     if(r == 0 || r == 1){
  76.         d = 0;
  77.     } else {
  78.         d = 11 - r;
  79.     }
  80.     soma_p = (d*2)+(cpf8*3)+(cpf7*4)+(cpf6*5)+(cpf5*6)+(cpf4*7)+(cpf3*8)+(cpf2*9)+(cpf1*10)+(cpf0*11);;
  81.     r = soma_p%11;
  82.     if(r == 0 || r == 1){
  83.         u = 0;
  84.     } else {
  85.         u = 11 - r;
  86.     }
  87.     printf("\nO CPF completo com digito verificador e: %ld%ld%ld.%ld%ld%ld.%ld%ld%ld-%ld%ld", cpf0, cpf1, cpf2, cpf3, cpf4, cpf5, cpf6, cpf7, cpf8, d, u);
  88. }
  89.  
RAW Paste Data