Validating only cpfs with different numbers

-1

Good evening guys needed to do in the function below a way to invalidate cpfs typed with equal numbers eg:

123456789 000000000 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999

inline bool isCpf ()  {   int digit1;   int digito2;   int temp = 0;   const int * cpf;     / * Getting the first checker digit:

Os 9 primeiros algarismos são multiplicados pela sequência 10, 9, 8, 7, 6, 5, 4, 3, 2
(o primeiro por 10, o segundo por 9, e assim por diante);
Em seguida, calcula-se o resto “r1″ da divisão da soma dos resultados das multiplicações por 11,
e se o resto for zero ou 1, digito é zero, caso contrário digito = (11-r1) */
for(char i = 0; i < 9; i++)
 temp += (cpf[i] * (10 - i));
  temp %= 11;

if(temp < 2)
 digito1 = 0;
  else
   digito1 = 11 - temp;

/*Obtendo o segundo digito verificador:
O dígito2 é calculado pela mesma regra, porém inclui-se o primeiro digito verificador ao final
da sequencia. Os 10 primeiros algarismos são multiplicados pela sequencia 11, 10, 9, ... etc...
(o primeiro por 11, o segundo por 10, e assim por diante);
procedendo da mesma maneira do primeiro digito*/
temp = 0;
 for(char i = 0; i < 10; i++)
  temp += (cpf[i] * (11 - i));
   temp %= 11;

if(temp < 2)
 digito2 = 0;
  else
   digito2 = 11 - temp;

/* Se os digitos verificadores obtidos forem iguais aos informados pelo usuário,
   então o CPF é válido */
if(digito1 == cpf[9] && digito2 == cpf[10])
 return true;
  else
   return false;

}

And to not get that lot of if and else I did it

inline bool isCpf ()  {   int digit1;   int digito2;   int temp = 0;   const int * cpf;     / * Getting the first checker digit:

Os 9 primeiros algarismos são multiplicados pela sequência 10, 9, 8, 7, 6, 5, 4, 3, 2
(o primeiro por 10, o segundo por 9, e assim por diante);
Em seguida, calcula-se o resto “r1″ da divisão da soma dos resultados das multiplicações por 11,
e se o resto for zero ou 1, digito é zero, caso contrário digito = (11-r1) */
for(char i = 0; i < 9; i++)
 temp += (cpf[i] * (10 - i));
  temp %= 11;

if(temp < 2)
 digito1 = 0;
  else
   digito1 = 11 - temp;

/*Obtendo o segundo digito verificador:
O dígito2 é calculado pela mesma regra, porém inclui-se o primeiro digito verificador ao final
da sequencia. Os 10 primeiros algarismos são multiplicados pela sequencia 11, 10, 9, ... etc...
(o primeiro por 11, o segundo por 10, e assim por diante);
procedendo da mesma maneira do primeiro digito*/
temp = 0;
 for(char i = 0; i < 10; i++)
  temp += (cpf[i] * (11 - i));
   temp %= 11;

if(temp < 2)
 digito2 = 0;
  else
   digito2 = 11 - temp;

if (digito1==cpf[10] && digito2==cpf[11])
  for(int i=0;i<=10;i++)cpf[i]==i;
   std::cout << "\n\tCPF Invalido - Digitos Iguais\n\n"; 

/* Se os digitos verificadores obtidos forem iguais aos informados pelo usuário,
   então o CPF é válido */
if(digito1 == cpf[9] && digito2 == cpf[10])
 return true;
  else
   return false;

}

Then I researched a site that generated cpf 'valid: link

it generated the following valid cpfs:

101.884.251-95 766.381.650-11 072.306.886-04 518.220.106-08 320.377.006-79

I've added this part to the code for invalid cpfs with equal numbers but He is causing even my cpf personal is invalid if I type because the program is doing the correct verification of the digits for validation:

if (digit1 == cpf [10] & digit2 == cpf [11])  for (int i = 0; i

asked by anonymous 04.02.2018 / 22:54

1 answer

1

The function below is able to check if a string (in the case of a CPF) is composed of a sequence of repeated characters, returns 0 if a sequence is detected:

int verificar_sequencia( const char * cpf )
{
    int i = 0;
    int n = strlen(cpf);

    for( i = 1; i < n; i++ )
        if( cpf[i] != cpf[i-1] )
            return 1;

    return 0;
}

Example: link

    
04.02.2018 / 23:49