tools.poderoso.io
← poderoso.io

Gerador de CPF válido

·gera CPF válido para testes
// cpf gerado

uso exclusivo para desenvolvimento e testes.

O gerador de CPF cria números de CPF que passam na validação do dígito verificador, para você usar em teste de cadastro, formulário e ambiente de homologação. São números sinteticamente válidos e não pertencem a nenhuma pessoa.

Como o CPF é validado

O CPF tem onze dígitos: nove de base e dois verificadores. Os verificadores saem de um cálculo de módulo 11 sobre os dígitos anteriores, com pesos decrescentes. O primeiro usa pesos de 10 a 2 sobre os nove primeiros dígitos; o segundo usa pesos de 11 a 2 sobre os dez primeiros, já incluindo o dígito recém calculado. Em ambos, resto menor que dois resulta em dígito zero.

É por isso que digitar onze dígitos quaisquer quase sempre é rejeitado: a chance de acertar os dois verificadores por acaso é de um em cem. A ferramenta faz esse cálculo, então o número gerado passa em qualquer validação de dígito verificador.

O nono dígito, aliás, não é aleatório na vida real: ele identifica a região fiscal de emissão, de 1 a 0, sendo 8 o código de São Paulo, por exemplo. Validador nenhum confere isso, mas vale saber que o número carrega essa informação.

O cálculo, passo a passo

Vale acompanhar com um número concreto: 529.982.247-25. A base são os nove primeiros dígitos, 529982247, e os dois últimos são o que vamos recalcular.

Primeiro dígito: multiplique cada um dos nove dígitos por um peso que começa em 10 e desce até 2. Fica 5x10=50, 2x9=18, 9x8=72, 9x7=63, 8x6=48, 2x5=10, 2x4=8, 4x3=12 e 7x2=14. A soma dá 295. O resto de 295 por 11 é 9. Como o resto é maior ou igual a 2, o dígito é 11 menos 9, ou seja, 2.

Segundo dígito: repita a conta sobre dez dígitos, agora incluindo o 2 que acabou de sair, com pesos de 11 a 2. A soma dá 347, o resto por 11 é 6, e o dígito é 11 menos 6, ou seja, 5. Fecha em 25, que é exatamente o que estava no número.

A regra que sobra é a do resto menor que 2: nesse caso o dígito é zero, não 11 nem 10. É de longe o erro mais comum em implementação caseira.

Implementação de referência

As duas funções abaixo fazem a conta descrita acima. O detalhe do (soma vezes 10) módulo 11 é um atalho aritmético equivalente à regra do 11 menos o resto, com a vantagem de já devolver 0 nos casos em que o resto era 0 ou 1. Só o 10 precisa ser tratado à parte.

Duas guardas antes da conta merecem atenção. A primeira remove só a máscara, ponto, hífen e espaço, em vez de remover todo caractere não numérico: um replace genérico aceitaria 529.982.247-25x, porque o x sairia junto com a pontuação. A segunda rejeita sequência repetida, sem a qual 111.111.111-11 e as outras dez passam, já que satisfazem o módulo 11 por acidente.

export function isValidCpf(value: string): boolean {
  // tira so a mascara. Um \D generico aqui aceitaria "529.982.247-25x",
  // porque o lixo sairia junto com o ponto e o hifen.
  const digits = value.replace(/[.\s-]/g, "");

  // 11 digitos e nada de sequencia repetida: 111.111.111-11
  // satisfaz o modulo 11 por acidente.
  if (!/^\d{11}$/.test(digits)) return false;
  if (/^(\d)\1{10}$/.test(digits)) return false;

  // len = 9 calcula o primeiro DV (pesos 10..2),
  // len = 10 calcula o segundo (pesos 11..2).
  const dv = (len: number): number => {
    let sum = 0;
    for (let i = 0; i < len; i++) {
      sum += Number(digits[i]) * (len + 1 - i);
    }
    const rest = (sum * 10) % 11;
    return rest === 10 ? 0 : rest;
  };

  return dv(9) === Number(digits[9])
    && dv(10) === Number(digits[10]);
}
public static bool IsValidCpf(string value)
{
    var digits = "";
    foreach (var c in value)
    {
        if (c == '.' || c == '-' || c == ' ') continue;
        if (c < '0' || c > '9') return false;
        digits += c;
    }

    if (digits.Length != 11) return false;

    var repeated = true;
    for (var i = 1; i < 11; i++)
        if (digits[i] != digits[0]) { repeated = false; break; }
    if (repeated) return false;

    int Dv(int len)
    {
        var sum = 0;
        for (var i = 0; i < len; i++)
            sum += (digits[i] - '0') * (len + 1 - i);
        var rest = sum * 10 % 11;
        return rest == 10 ? 0 : rest;
    }

    return Dv(9) == digits[9] - '0'
        && Dv(10) == digits[10] - '0';
}

Válido não é o mesmo que existente

Passar no dígito verificador significa apenas que o número é bem formado. Não diz nada sobre estar inscrito na Receita Federal, nem sobre a situação cadastral. Quem precisa dessa checagem consulta a Receita, e nenhum gerador substitui isso.

Alguns validadores mal escritos aceitam sequências como 111.111.111-11, que satisfazem o módulo 11 por acidente. Um validador correto rejeita as onze sequências de dígito repetido explicitamente. Vale testar o seu com esses valores.

Uso responsável

Estes números servem para desenvolvimento e teste. Usar CPF de terceiro ou apresentar CPF falso como próprio em cadastro real é crime. O ponto da ferramenta é justamente o contrário: parar de usar CPF de pessoa real em base de teste, o que também é uma exigência prática da LGPD, já que ambiente de homologação com dado real continua sendo tratamento de dado pessoal.

Nada do que você cola aqui sai do seu navegador. O processamento é todo local, em JavaScript, sem envio para servidor, sem log e sem armazenamento.

Perguntas frequentes

O CPF gerado existe de verdade?

Não. Ele é matematicamente válido, ou seja, passa na checagem do dígito verificador, mas não corresponde a nenhum cadastro na Receita Federal. É exatamente o que se quer em ambiente de teste.

Posso usar em cadastro real?

Não. Serve só para desenvolvimento, teste automatizado e homologação. Usar CPF falso ou de terceiro em cadastro real é ilegal.

Como funciona o cálculo do dígito verificador?

Os dois últimos dígitos vêm de um módulo 11. O primeiro aplica pesos de 10 a 2 sobre os nove dígitos de base; o segundo aplica pesos de 11 a 2 sobre os dez dígitos já com o primeiro verificador. Se o resto for menor que dois, o dígito é zero.

Por que 111.111.111-11 passa em alguns validadores?

Porque sequências de dígito repetido satisfazem o módulo 11 por acidente. Um validador correto rejeita as onze sequências explicitamente, antes de calcular. É um bom caso de teste para o seu código.

O que significa o nono dígito do CPF?

Ele indica a região fiscal em que o CPF foi emitido. Não entra em nenhuma validação de formato, mas explica por que CPFs de um mesmo estado tendem a compartilhar esse dígito.

Referências