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.
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);
Pergunta
wllington duarte
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");
}
}
}
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.