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