cnpjcpf.
Código · JavaScript

Gerar CPF em JavaScript

Função sem dependências que gera um CPF matematicamente válido para teste: sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11. Com opção de máscara. Números fictícios, só para dev e QA.

A função

JavaScript
const dv = (nums, p0) => {
  let s = 0, p = p0;
  for (const n of nums) { s += n * p; p--; }
  const r = s % 11;
  return r < 2 ? 0 : 11 - r;
};

function generateCPF({ mask = false } = {}) {
  const base = Array.from({ length: 9 }, () => Math.floor(Math.random() * 10));
  const d1 = dv(base, 10), d2 = dv([...base, d1], 11);
  const s = [...base, d1, d2].join('');
  return mask ? s.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4') : s;
}

generateCPF();             // '11144477735'
generateCPF({ mask: true }); // '111.444.777-35'

Sorteia 9 dígitos de base, calcula o 1º verificador com pesos 10..2 e o 2º com pesos 11..2 (incluindo o 1º DV no cálculo). O resto da divisão por 11 vira o dígito: resto < 2 ? 0 : 11 - resto. É o módulo 11 aplicado para frente.

Validar o que você gerou

A mesma função dv serve para conferir. Útil em teste: gere, valide, garanta que o algoritmo fecha.

JavaScript
function isValidCPF(cpf) {
  cpf = String(cpf).replace(/\D/g, '');
  if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false;
  const n = cpf.split('').map(Number);
  const d1 = dv(n.slice(0, 9), 10);
  const d2 = dv(n.slice(0, 9).concat(d1), 11);
  return d1 === n[9] && d2 === n[10];
}

isValidCPF(generateCPF()); // true
publicidade

Cuidados

  • Número fictício, não real. A função gera um CPF que passa no módulo 11, mas não corresponde a nenhuma pessoa. É para teste de software e QA — ver se é legal gerar CPF/CNPJ.
  • Válido ≠ existe. Consistência matemática não é emissão pela Receita. Não use saída de gerador como dado de pessoa real.
  • Sequências repetidas (11111111111) são tecnicamente consistentes no módulo 11; o validador acima as rejeita de propósito, mas o gerador quase nunca as produz (base aleatória).
  • Math.random não é criptográfico. Para massa de teste tudo bem; se precisar de imprevisibilidade real, troque por crypto.getRandomValues.
  • Guarde sem máscara (só os 11 dígitos) e formate só na exibição.

Continue

Código verificado por execução: a saída passa no validador (módulo 11 oficial). Números fictícios para teste de software. Revisado em 06/2026.