Educacional
    Atualizado

    Como calcular os 2 dígitos verificadores do CPF

    Aprenda passo a passo como calcular manualmente os dois dígitos verificadores do CPF com exemplos e código. Teste depois no validador online.

    Equipe Ferramentas Para Tudo16 de julho de 20268 min de leitura

    O CPF tem dois dígitos verificadores no final que confirmam se os 9 primeiros números não foram digitados ou copiados com erro. Aqui você vai aprender o cálculo manual dos dois dígitos, método usado por sistemas de validação, com um exemplo prático e código pronto para devs.

    O passo a passo abaixo é o padrão: calcule o primeiro dígito com os 9 números e pesos decrescentes de 10 a 2; depois calcule o segundo dígito incluindo o primeiro dígito calculado, com pesos de 11 a 2. Depois de conferir, use nossa ferramenta validador de CPF em /ferramentas/validador-cpf para testar rapidamente.

    O que são os dígitos verificadores do CPF

    Os dois últimos dígitos do CPF são chamados dígitos verificadores. Eles funcionam como um checksum: um cálculo aritmético sobre os 9 primeiros dígitos gera esses dois números. Se alguém alterar um dígito, provavelmente os verificadores não baterão.

    Regra passo a passo para calcular o 1º dígito

  1. Anote os 9 primeiros dígitos do CPF (sem pontos ou traço).
  2. Aplique pesos decrescentes de 10 a 2, multiplicando cada dígito pelo peso correspondente.
  3. Some todos os produtos.
  4. Divida a soma por 11 e calcule o resto (mod 11).
  5. Se o resto for menor que 2, o 1º dígito verificador é 0. Caso contrário, o dígito é 11 menos o resto.
  6. Exemplo do passo (fórmula):

    • Soma = d1*10 + d2*9 + ... + d9*2
    • Resto = Soma % 11
    • 1º dígito = (Resto < 2) ? 0 : 11 - Resto

    Regra passo a passo para calcular o 2º dígito

  7. Pegue os 9 dígitos originais e acrescente o 1º dígito calculado no final (total 10 números).
  8. Agora aplique pesos decrescentes de 11 a 2 sobre esses 10 números.
  9. Some os produtos, calcule o resto da divisão por 11.
  10. Se o resto for menor que 2, o 2º dígito é 0. Caso contrário, é 11 menos o resto.
  11. Exemplo do passo (fórmula):

    • Soma2 = d1*11 + d2*10 + ... + d9*3 + d10*2
    • Resto2 = Soma2 % 11
    • 2º dígito = (Resto2 < 2) ? 0 : 11 - Resto2

    Exemplo prático completo (CPF: 123.456.789-09)

    Vamos calcular os dígitos de exemplo para a base 123456789.

    1º dígito:

    • Pesos: 10,9,8,7,6,5,4,3,2
    • Produtos: 1*10=10, 2*9=18, 3*8=24, 4*7=28, 5*6=30, 6*5=30, 7*4=28, 8*3=24, 9*2=18
    • Soma = 10+18+24+28+30+30+28+24+18 = 210
    • Resto = 210 % 11 = 1
    • Como resto < 2, 1º dígito = 0

    2º dígito (agora com 1234567890):

    • Pesos: 11,10,9,8,7,6,5,4,3,2
    • Produtos: 1*11=11, 2*10=20, 3*9=27, 4*8=32, 5*7=35, 6*6=36, 7*5=35, 8*4=32, 9*3=27, 0*2=0
    • Soma2 = 11+20+27+32+35+36+35+32+27+0 = 255
    • Resto2 = 255 % 11 = 2
    • Como resto2 >= 2, 2º dígito = 11 - 2 = 9

    Resultado final: 123.456.789-09

    Algoritmo pronto (JS e Python)

    Use estes trechos em seus testes. Eles implementam exatamente as regras acima.

    JavaScript (Node / browser):

    ``

    function calcularDigitosCPF(base9) {

    const nums = String(base9).replace(/\D/g, '').padStart(9, '0').slice(-9).split('').map(Number);

    function calc(nums, inicioPeso) {

    let soma = 0;

    for (let i = 0; i < nums.length; i++) soma += nums[i] * (inicioPeso - i);

    const resto = soma % 11;

    return resto < 2 ? 0 : 11 - resto;

    }

    const d1 = calc(nums, 10);

    const d2 = calc([...nums, d1], 11);

    return ${d1}${d2};

    }

    // Exemplo

    console.log(calcularDigitosCPF('123456789')); // '09'

    `

    Python (3.x):

    `

    def calcular_digitos_cpf(base9):

    s = ''.join([c for c in str(base9) if c.isdigit()])[-9:].rjust(9, '0')

    nums = [int(c) for c in s]

    def calc(nums, peso_inicio):

    soma = sum(n * (peso_inicio - i) for i, n in enumerate(nums))

    resto = soma % 11

    return 0 if resto < 2 else 11 - resto

    d1 = calc(nums, 10)

    d2 = calc(nums + [d1], 11)

    return f"{d1}{d2}"

    # Exemplo

    print(calcular_digitos_cpf('123456789')) # '09'

    ``

    Boas práticas para devs, RH e contabilidade

    • Nunca aceite CPFs com todos os dígitos iguais (ex.: 111.111.111-11), trate como inválidos mesmo que a soma confirme.
    • Ao validar massa de dados, primeiro normalize (remova pontos/traço) e verifique tamanho 11. Depois aplique o cálculo.
    • Para testes automatizados, gere CPFs válidos com o gerador de CPF em /ferramentas/gerador-cpf e valide com o validador em /ferramentas/validador-cpf.
    • Em integrações, faça validação no backend; no front apenas feedback amigável pro usuário.

    Conclusão

    Calcular os dois dígitos verificadores do CPF é um processo determinístico simples: soma ponderada e módulo 11 com a regra do "<2 vira 0". Para evitar erros manuais, use nossa ferramenta validador de CPF em /ferramentas/validador-cpf, ela aceita lote e mostra onde falhou. Se precisar gerar CPFs de teste, confira também o gerador em /ferramentas/gerador-cpf.

    FAQ

    O que fazer se os dígitos calculados não baterem com o CPF informado?

    Se o cálculo não bater, trate o CPF como inválido e solicite confirmação ao usuário. Para bases internas, marque o registro para revisão; não corrija automaticamente. Em massa, use o validador para identificar padrões de erro (ordem trocada, corte de zeros à esquerda).

    Posso usar qualquer linguagem para implementar a validação do CPF?

    Sim. A lógica é matemática simples (multiplicação e soma), portátil para qualquer linguagem. Apenas cuide de normalizar entradas (remover espaços e símbolos) e proteger contra strings curtas ou com caracteres não numéricos.

    Por que a regra usa módulo 11 e por que o limite é 2?

    Módulo 11 oferece boa detecção de erros comuns (troca de dígitos, dígito errado). A regra do limite 2 é escolha histórica do formato do CPF: restos 0 ou 1 produzem dígito 0 para evitar resultados ambíguos e manter uniformidade no sistema.