Guia · 2026-10-02T00:00:00.000Z
Como o dígito do CPF é calculado
Entenda os pesos do módulo 11, o que fazer com resto menor que 2 e por que uma sequência repetida não é um CPF de teste aceitável.
O gerador de CPF do GeraDados existe para uma pergunta concreta: o número que o formulário devolve fecha a conta, e a máscara sobrevive ao copiar e colar? A conta em si cabe em um parágrafo, e vale a pena tê-la no time antes de discutir biblioteca.
Um CPF tem onze dígitos. Os nove primeiros identificam a inscrição; os dois últimos são verificadores. Para o primeiro, multiplique os nove dígitos pelos pesos 10, 9, 8, 7, 6, 5, 4, 3 e 2, da esquerda para a direita. Some. Divida por 11 e olhe o resto. Se o resto for 0 ou 1, o dígito é 0. Se for de 2 a 10, o dígito é 11 menos o resto.
O segundo dígito repete a ideia com dez números — os nove originais mais o dígito que você acabou de obter — e pesos de 11 até 2. O vetor clássico 529.982.247-25 fecha as duas contas. Se você alterar o último 5 para 6, a segunda conta quebra e o validador recusa. Isso é o comportamento que um teste de unidade deve travar.
Há um caso que passa na aritmética e ainda assim é inválido: os onze dígitos iguais. 111.111.111-11 produz verificadores 1 e 1. O cadastro recusa a sequência, e o gerador também. Se o seu validador só olha o módulo, ele aceita lixo que nenhum ambiente de homologação sério deveria deixar seguir.
Máscara é outra camada. 52998224725 e 529.982.247-25 são o mesmo número. Um bom campo remove tudo que não é dígito antes de calcular, e só então devolve a pontuação. O erro comum é calcular o dígito em cima do ponto, ou cortar o número quando o usuário cola com espaço.
Nada disso consulta a Receita Federal. Um CPF com dígito certo pode pertencer a alguém, pode nunca ter sido emitido, ou pode estar suspenso. Para teste de interface, a matemática basta. Para abrir conta, emitir nota ou assinar contrato, a matemática não basta. O aviso no topo da ferramenta existe por causa dessa diferença, não por formalidade.
Na prática, eu fixo dois fixtures no repositório: um válido estável e um inválido estável, com o dígito trocado. O botão gerar fica para explorar a tela. O teste automatizado não deve depender de Math.random sem semente, senão a falha de terça não reproduz na quarta.
Se o próximo campo do formulário for CNPJ, a conta muda de pesos e, desde o formato alfanumérico, muda também o valor de cada caractere. O texto CNPJ alfanumérico sem mistério continua daqui.