Como validar número de CPF com Javascript 🚀
Você sabia que um CPF consegue descobrir que ele mesmo é falso? Neste artigo, vamos explorar o algoritmo matemático por trás da validação do CPF, entender como os dígitos verificadores funcionam e implementar uma função completa em JavaScript puro. Ideal para quem está aprendendo lógica de programação ou precisa validar CPFs em projetos reais.
Como validar número de CPF com JavaScript: Guia completo com algoritmo e código
Você sabia que um CPF consegue "descobrir" que ele mesmo é falso? Pode parecer estranho, mas todo CPF possui dois dígitos verificadores que funcionam como uma assinatura matemática. Sempre que um sistema valida um CPF, ele executa uma sequência de cálculos utilizando os nove primeiros números e compara o resultado com os dois últimos dígitos. Se os valores não coincidirem, o documento é considerado inválido.
Como validar número de CPF com Javascript 🚀
"O CPF não é apenas um número - é uma assinatura matemática que carrega consigo a capacidade de se validar. Entender esse algoritmo é entender um pouco da beleza escondida nos sistemas que usamos todos os dias."
O que é o CPF e por que ele precisa ser validado?
O Cadastro de Pessoas Físicas (CPF) é o documento mais utilizado no Brasil para identificação de cidadãos. Criado pela Receita Federal, o CPF é composto por 11 dígitos que seguem um padrão matemático específico.
A validação do CPF é uma tarefa comum em sistemas de cadastro, formulários web, aplicativos e plataformas que precisam garantir que os dados inseridos pelos usuários são consistentes. Mas por que validar um CPF?
- Integridade dos dados: Evita que dados incorretos entrem no sistema
- Experiência do usuário: Feedback imediato sobre a validade do documento
- Segurança: Uma camada inicial de verificação antes de consultas mais profundas
- Economia de recursos: Evita chamadas desnecessárias a APIs externas
Neste artigo, vamos construir uma função completa de validação de CPF usando JavaScript puro, entendendo cada etapa do algoritmo e como aplicá-lo em projetos reais.
A estrutura do CPF: entendendo os dígitos
Um CPF válido tem a seguinte estrutura:
// Formato: XXX.XXX.XXX-YY
// Onde:
// - XXX.XXX.XXX = 9 dígitos base
// - YY = 2 dígitos verificadores
// Exemplo: 123.456.789-09
// Base: 123456789
// Dígitos verificadores: 09
Os dois últimos dígitos são chamados de dígitos verificadores. Eles não são aleatórios - são calculados a partir dos nove primeiros dígitos usando um algoritmo matemático específico.
É exatamente esse algoritmo que permite que um sistema "descubra" se um CPF é falso ou verdadeiro, sem precisar consultar a Receita Federal.
O algoritmo de validação do CPF
O algoritmo de validação do CPF é composto por duas etapas principais: o cálculo do primeiro dígito verificador e o cálculo do segundo dígito verificador.
Passo 1: Cálculo do primeiro dígito verificador
Para calcular o primeiro dígito verificador, utilizamos os 9 primeiros dígitos do CPF:
- Multiplicamos cada um dos 9 dígitos por uma sequência decrescente de 10 a 2
- Somamos todos os resultados
- Calculamos o resto da divisão da soma por 11
- Subtraímos o resto de 11
- Se o resultado for maior que 9, o dígito é 0
// CPF base: 123456789
// Pesos: 10, 9, 8, 7, 6, 5, 4, 3, 2
// 1*10 + 2*9 + 3*8 + 4*7 + 5*6 + 6*5 + 7*4 + 8*3 + 9*2
// = 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18
// = 210
// 210 % 11 = 1 (resto da divisão por 11)
// 11 - 1 = 10
// 10 > 9 → dígito = 0
// Primeiro dígito verificador: 0
Passo 2: Cálculo do segundo dígito verificador
Para calcular o segundo dígito verificador, utilizamos os 10 primeiros dígitos (incluindo o primeiro dígito verificador):
- Multiplicamos cada um dos 10 dígitos por uma sequência decrescente de 11 a 2
- Somamos todos os resultados
- Calculamos o resto da divisão da soma por 11
- Subtraímos o resto de 11
- Se o resultado for maior que 9, o dígito é 0
// CPF com primeiro dígito: 1234567890
// Pesos: 11, 10, 9, 8, 7, 6, 5, 4, 3, 2
// 1*11 + 2*10 + 3*9 + 4*8 + 5*7 + 6*6 + 7*5 + 8*4 + 9*3 + 0*2
// = 11 + 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0
// = 255
// 255 % 11 = 2 (resto da divisão por 11)
// 11 - 2 = 9
// Segundo dígito verificador: 9
Implementando a validação em JavaScript
Agora que entendemos o algoritmo, vamos implementá-lo em JavaScript. A função completa de validação:
function validarCPF(cpf) {
// Remove caracteres não numéricos
cpf = cpf.replace(/\D/g, "");
// Verifica se tem 11 dígitos
if (cpf.length !== 11) {
return false;
}
// Verifica se todos os dígitos são iguais
if (/^(\d)\1+$/.test(cpf)) {
return false;
}
// Cálculo do primeiro dígito verificador
let soma = 0;
for (let i = 0; i < 9; i++) {
soma += Number(cpf[i]) * (10 - i);
}
let primeiroDigito = (soma * 10) % 11;
if (primeiroDigito === 10) {
primeiroDigito = 0;
}
if (primeiroDigito !== Number(cpf[9])) {
return false;
}
// Cálculo do segundo dígito verificador
soma = 0;
for (let i = 0; i < 10; i++) {
soma += Number(cpf[i]) * (11 - i);
}
let segundoDigito = (soma * 10) % 11;
if (segundoDigito === 10) {
segundoDigito = 0;
}
if (segundoDigito !== Number(cpf[10])) {
return false;
}
return true;
}
Testando a função
// CPFs válidos
console.log(validarCPF("123.456.789-09")); // true
console.log(validarCPF("529.982.247-25")); // true
// CPFs inválidos
console.log(validarCPF("111.111.111-11")); // false
console.log(validarCPF("123.456.789-00")); // false
Construindo a interface completa
Agora vamos criar uma interface completa para validar CPF em tempo real:
HTML
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Validador de CPF</title>
<link rel="stylesheet" href="./style.css">
<script src="./main.js" defer></script>
</head>
<body>
<div class="container">
<div class="card">
<h1>Descubra se um CPF é verdadeiro</h1>
<p>Digite um CPF abaixo:</p>
<input type="text" id="cpf"
placeholder="000.000.000-00"
oninput="validarCPF(this.value)">
<div id="resultado">
Aguardando CPF...</div>
</div>
</div>
</body>
</html>
CSS
/* style.css */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background: #0f172a;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
color: #f8fafc;
}
.container {
width: 100%;
max-width: 400px;
padding: 20px;
}
.card {
background: #1e293b;
padding: 40px;
border-radius: 12px;
text-align: center;
box-shadow: 0 10px 40px rgba(0,0,0,0.5);
}
h1 {
font-size: 1.5rem;
margin-bottom: 12px;
}
p {
color: #94a3b8;
margin-bottom: 20px;
}
input {
width: 100%;
padding: 14px 16px;
border-radius: 8px;
border: 1px solid #334155;
background: #0f172a;
color: #f8fafc;
font-size: 1.1rem;
text-align: center;
transition: border 0.3s;
}
input:focus {
border-color: #38bdf8;
outline: none;
}
#resultado {
margin-top: 20px;
padding: 14px;
border-radius: 8px;
background: #0f172a;
color: #94a3b8;
font-weight: bold;
transition: all 0.3s;
}
JavaScript completo
/* main.js */
function validarCPF(cpf) {
const resultado = document.getElementById("resultado");
// Remove caracteres não numéricos
cpf = cpf.replace(/\D/g, "");
// Verifica se tem 11 dígitos
if (cpf.length < 11) {
resultado.innerHTML = "Digite um CPF completo";
resultado.style.background = "#f1f1f1";
resultado.style.color = "#333";
return;
}
if (cpf.length !== 11) {
exibirFalso();
return;
}
// Verifica se todos os dígitos são iguais
if (/^(\d)\1+$/.test(cpf)) {
exibirFalso();
return;
}
// Cálculo do primeiro dígito verificador
let soma = 0;
for (let i = 0; i < 9; i++) {
soma += Number(cpf[i]) * (10 - i);
}
let primeiroDigito = (soma * 10) % 11;
if (primeiroDigito === 10) {
primeiroDigito = 0;
}
if (primeiroDigito !== Number(cpf[9])) {
exibirFalso();
return;
}
// Cálculo do segundo dígito verificador
soma = 0;
for (let i = 0; i < 10; i++) {
soma += Number(cpf[i]) * (11 - i);
}
let segundoDigito = (soma * 10) % 11;
if (segundoDigito === 10) {
segundoDigito = 0;
}
if (segundoDigito !== Number(cpf[10])) {
exibirFalso();
return;
}
resultado.innerHTML = "✅ CPF VERDADEIRO";
resultado.style.background = "#d1fae5";
resultado.style.color = "#065f46";
}
function exibirFalso() {
const resultado = document.getElementById("resultado");
resultado.innerHTML = "❌ CPF FALSO";
resultado.style.background = "#fee2e2";
resultado.style.color = "#991b1b";
}
Melhorias e casos especiais
A função básica já funciona, mas podemos melhorá-la com algumas adições:
Versão otimizada com validação de CPFs conhecidos
function validarCPF(cpf) {
cpf = cpf.replace(/\D/g, "");
// Validações básicas
if (cpf.length !== 11) return false;
if (/^(\d)\1+$/.test(cpf)) return false;
// Lista de CPFs conhecidos inválidos
const invalidos = [
"00000000000",
"11111111111",
"22222222222",
"33333333333",
"44444444444",
"55555555555",
"66666666666",
"77777777777",
"88888888888",
"99999999999"
];
if (invalidos.includes(cpf)) return false;
// ... resto da validação
return true;
}
Descubra se um CPF é verdadeiro
📂 Código Fonte
Todo o código utilizado neste artigo está disponível no GitHub para você baixar, testar e modificar:
GitHub - cpfjsConclusão
Validar CPF com JavaScript é um exercício excelente para entender lógica de programação, manipulação de arrays e algoritmos matemáticos. Além disso, é uma habilidade prática que pode ser aplicada em projetos reais imediatamente.
Ao longo deste artigo, você aprendeu:
- ✅ A estrutura matemática do CPF
- ✅ Como calcular os dígitos verificadores
- ✅ Como implementar a validação em JavaScript puro
- ✅ Como criar uma interface interativa para validação
- ✅ Boas práticas e melhorias para a função
💡 Lembre-se: A validação matemática é apenas o primeiro passo. Para sistemas críticos, sempre combine a validação de estrutura com verificações adicionais, como consultas a bases de dados oficiais.
🤔 O que você achou?
💬 Quer aprender JavaScript do ZERO? Comece agora a escrever seu primeiro código e seus fundamentos!
❓ FAQ: Perguntas Frequentes sobre sobre Validação de CPF
🎬 Assista ao Vídeos completo sobre Refatoração
O vídeo foi feito em Javascript mais o conceito pode ser utilizado em qualquer outra linguagem de programação..
🎬 Assista ao Vídeos completo sobre Refatoração
🔗 Conecte-se Comigo
💬 Você já conhecia o algoritmo de validação do CPF? Prefere implementar sua própria função ou utilizar uma biblioteca pronta? Conta aqui nos comentários como você costuma validar CPF nos seus projetos! 👇
#JavaScript #CPF #JavaScriptPuro #Programacao #DesenvolvimentoWeb #Frontend #Backend #LogicaDeProgramacao #Programador #WebDeveloper #Codigo #Tutorial #Dev #PHP #ProjetoWeb