Jump to content
Fórum Script Brasil

wllington duarte

Membros
  • Posts

    1
  • Joined

  • Last visited

Everything posted by wllington duarte

  1. gente eu tenho um trabalho para fazer que divide se em 2 parte eu já fiz boa parte do trabalho mas eu não consigo termina -lo e ele é para amanha e vale metade da nota por favor me ajudem Primeira metade: Deve ser criado um algoritmo que leia um CPF e armazene em uma variável do tipo cadeia. Em seguida, um teste deve ser feito para verificar se o que foi lido é um CPF em formato válido. Os formatos válidos são:  Três números, um ponto, três números, um ponto, três números, um traço, dois números (xxx.xxx.xxx-xx);  Apenas números. Sendo assim, um CPF 111.222.333-45 está no formato válido, assim como 11122233345 também está. Segunda metade: Após o teste do formato, deverá ser verificado se o CPF lido é de fato um CPF válido ou não. Para isso, o algoritmo de verificação especificado na página seguinte deverá ser implementado. A resposta final do algoritmo deve ser: i. Que o CPF está no formato correto e também é válido de acordo com o DV. ii. Que o CPF está no formato correto, mas é inválido de acordo com o DV. iii. Que o CPF não está no formato correto. Método de Validação No CPF (primeiros 9 digitos), o primeiro DV (penúltimo digito) é obtido através do somatório da multiplicação de cada digito do CPF por respectivamente 9, 8, 7, 6, 5, 4, 3, 2, 1 a partir da unidade. Do resultado desta soma é obtido o resto da divisão por 11 e este será o primeiro DV. Caso o resto seja 10, o DV será 0. Por exemplo, no CPF 111.222.333-__, o primeiro DV será calculado da seguinte forma: 1 1 1 2 2 2 3 3 3 (CPF) x x x x x x x x x 1 2 3 4 5 6 7 8 9 (Multiplicadores) 1 +2 +3 +8 +10+12+21+24+27 = 108 (Somatório das multiplicações) 108/11 = 9 com resto 9 (Divisão por 11) Sendo assim, 9 (resto da divisão) é o primeiro DV. Portanto, já fica claro que o CPF 111.222.333-45 é INVÁLIDO, pois o primeiro DV informado foi 4, e através do cálculo vimos que deveria ser 9. O segundo DV (último digito) é calculado de maneira similar. É feito o somatório da multiplicação de cada digito do CPF mais o primeiro DV (obtido anteriormente) por respectivamente 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 a partir da unidade. Do resultado também é pego o resto da divisão por 11. Por exemplo, no CPF 111.222.333-9_, o segundo DV será calculado da seguinte forma: 1 1 1 2 2 2 3 3 3 9 (CPF + primeiro DV) x x x x x x x x x x 0 1 2 3 4 5 6 7 8 9 (Multiplicadores) 0 +1 +2 +6 +8 +10+18+21+24+81 = 171 (Somatório das multiplicações) 171/11 = 15 com resto 6 (Divisão por 11) Sendo assim, 6 é o segundo DV. Por isso, a única forma do CPF 111.222.333 ser válido é se os dois dígitos DV forem 96. O CPF informado é inválido, já que os DVs informados foram 45. #include <stdio.h> #include <stdlib.h> #include <locale.h> int main (){ setlocale(LC_ALL, ""); char cpf[15]; int v1, v2, dv1, dv2, temp1, temp2; int tam=0; int i, x; printf("%s, digite seu cpf: "); fflush(stdin); scanf("%s", &cpf); for(i = 0; i< 15; i++){ if(cpf == '\0'){ tam = i; } } if(tam == 11){ printf("CPF está no formato correto"); v1 = cpf[9]; v2 = cpf[10]; temp1 = (cpf[0] * 1) + (cpf[1] * 2 ) + (cpf[2] * 3) + (cpf[3] * 4) + (cpf[4] * 5) + (cpf[5] * 6) + (cpf[6] * 7) + (cpf[7] * 8) + (cpf[8] * 9); dv1 = temp1 % 11; if (dv1 == 0){ dv1= 0; } cpf[9] = '\0'; cpf[9] = dv1; temp1 = (cpf[0] * 0) + (cpf[1] * 1) + (cpf[2] * 2) + (cpf[3] * 3) + (cpf[4] * 4) + (cpf[5] * 5) + (cpf[6] * 6) + (cpf[7] * 7) + (cpf[8] * 8) + (cpf[9] * 9); dv2 = temp2 % 11; if(v1 == cpf[9] && v2 == cpf[10]){ } else{ printf("CPF NÃO está de acordo com os DV's"); } } else if(tam == 14){ if(cpf[3] == '.' && cpf[7] == '.' && cpf[11] == '-'){ cpf[3] = '\0'; cpf[7] = '\0'; cpf[11] = '\0'; cpf[3] = cpf[4]; cpf[4] = cpf[5]; cpf[5] = cpf[6]; cpf[6] = cpf[7]; cpf[8] = cpf[9]; cpf[9] = cpf[10]; cpf[11] = cpf[12]; } for(x = 0; x < 15; x++){ if(cpf[x] == 0 || cpf[x] == 1 || cpf[x] == 2 || cpf[x] == 3 || cpf[x] == 4 || cpf[x] == 5 || cpf[x] == 6 || cpf[x] == 7 || cpf[x] == 8 || cpf[x] == 9){ temp1 = (cpf[0] * 1) + (cpf[1] * 2 ) + (cpf[2] * 3) + (cpf[3] * 4) + (cpf[4] * 5) + (cpf[5] * 6) + (cpf[6] * 7) + (cpf[7] * 8) + (cpf[8] * 9); dv1 = temp1 % 11; if (dv1 == 0){ dv1= 0; } cpf[9] = '\0'; cpf[9] = dv1; temp1 = (cpf[0] * 0) + (cpf[1] * 1) + (cpf[2] * 2) + (cpf[3] * 3) + (cpf[4] * 4) + (cpf[5] * 5) + (cpf[6] * 6) + (cpf[7] * 7) + (cpf[8] * 8) + (cpf[9] * 9); dv2 = temp2 % 11; cpf[10] = '\0'; cpf[10] = dv2; if (dv2 == 0){ dv2= 0;} } if(v1 == cpf[9] && v2 == cpf[10]){ printf("CPF está de acordo com os DV's"); } else{ printf("CPF NÃO está de acordo com os DV's"); } } } }
×
×
  • Create New...