Validar CPF em C++ (esse funciona)
Publicado por Fernando (última atualização em 02/03/2018)
[ Hits: 43.167 ]
Homepage: https://github.com/phoemur/
Download validacpf1.cxx (versão 2)
Mais um algoritmo para validação de CPF, de acordo com as regras da Receita Federal, em C++.
Basicamente ele cria o dígito verificador e compara com o fornecido.
Detalhes nos comentários.
Versão 2 - Enviado por César em 01/02/2018
Changelog: Eu baixei o seu codigo e modifiquei de forma a ficar dentro de uma classe para ter uma função de input e um get
só nao consegui fazer com que mostrasse com os separadores.
/* Programinha em C++ que checa se um número de CPF é válido
validacpf.cpp - abr/2013 - Fernando Bolonhezi Giannasi
Modificação do Script Referência: http://leowgweb.wordpress.com/2012/05/06/algoritmo-de-validacao-de-cpf */
#include <iostream>
using namespace std;
bool validaCPF(const int * const); //protótipo da função que checa o CPF, retorna true ou false
int main(void)
{
int cpf[11];
char input[12];
cout << "Digite o número do CPF sem pontos, espaços ou traços:" << endl;
cin.getline(input, 12, '\n');
for(char i = 0; i < 11; i++)
{
cpf[i] = static_cast<int>(input[i] - 48); //Convertendo char para valor absoluto segundo tabela ASCII e passando para array de inteiros//
if(cpf[i] < 0 || cpf[i] > 9){ //Validando a entrada de dados
cout << "ENTRADA INVÁLIDA" << endl;
return 1;}
}
cout << "\nO CPF digitado foi: " << endl;
for(char i = 0; i < 11; i++)
{
cout << cpf[i];
if(i == 2 || i == 5)
cout << ".";
if(i == 8)
cout << "-";
}
cout << "\n\n";
if(validaCPF(cpf) == true)
cout << "O CPF digitado É válido" << endl;
else
cout << "O CPF digitado NÃO É VÁLIDO" << endl;
return 0;
}
inline bool validaCPF(const int * const cpf)
{
int digito1,
digito2,
temp = 0;
/*Obtendo o primeiro digito verificador:
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;
}
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Secure boot, artigo interessante, nada técnico. (1)
Preciso recuperar videos *.mp4 corrompidos (1)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (6)









