Ir para conteúdo
Fórum Script Brasil

wllington duarte

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por 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");
                    }        
             }
            }
        }

×
×
  • Criar Novo...