Validating only cpfs with different numbers

Asked

Viewed 250 times

-1

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

123456789 000000000 111111111 222222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999

would all be invalid because they do not exist: then I have the following function below to validate Cpf:

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

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 not to be with that lot of if and I did that

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

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 searched a site that generated Cpf' validated: http://geradordecpf.clevert.com.br/

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 added this part to the code for invalidate cpfs with equal numbers but He’s making up mine Cpf personal is invalid if I type because the program is doing the correct check of the digits for validation:

if (digito1==Cpf[10] && digito2==Cpf[11]) for(int i=0;i<=10;i++)cpf[i]==i; Std::Cout << " n tCPF Invalid - Equal Digits n n";

The program receives the Cpf without dots or dashes, then Cpf below is validated without using this part of the code: 76638165011

And if I replace it with 382 it invalidates the program’s not validating input format but checking the correct numbers. 76638265011

my doubt revolves around invalidation of cpfs with digits equal to those mentioned, but that does not become invalid if I enter with my own personal Cpf or with a valid Cpf not only in the amount of digits but with validated verifier.

This is the conpleto program: https://pastebin.com/djeibpRZ

1 answer

1


The function below is able to check whether 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: https://github.com/LacobusVentura/CPF-Gen/blob/master/cpfgen.c

  • i have adapted its function into the bool function as follows: int n = sizeof(Cpf); for(int i = 1; i < n; i++ ) if(Cpf[i] != Cpf[i-1]) Return true; Return false; but it still validates the following digits: 123456789

  • Do not worry about validating numerical sequences, according to the IRS, in a document entitled Executive Declaratory Act No 1, Annex I of 23 May 2002, Cpfs formed by sequences are also valid!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.