Documentos

Como Validar PIS/PASEP

Entenda a regra de validação do PIS/PASEP passo a passo. Aprenda o cálculo do Módulo 11 e veja exemplos de código prontos em JavaScript, Python e C#.

05 de julho de 20266 min de leituraDevThru

O PIS (Programa de Integração Social) e o PASEP (Programa de Formação do Patrimônio do Servidor Público) utilizam a mesma estrutura de numeração do NIS (Número de Identificação Social). Essa chave de 11 dígitos é amplamente utilizada em cadastros trabalhistas, sistemas de RH, folhas de pagamento e ERPs no Brasil.

Neste guia prático, vamos analisar a estrutura matemática do PIS/PASEP, aprender como calcular o seu dígito verificador utilizando a regra de Módulo 11 e disponibilizar exemplos de código prontos para integrar em seus sistemas.

Estrutura do PIS/PASEP

O PIS/PASEP é composto por 11 dígitos numéricos e geralmente se apresenta no formato formatado XXX.XXXXX.XX-X:

ComponentePosiçãoFunção
Identificador único1 a 10Número base gerado sequencialmente
Dígito Verificador11Checksum para validação da estrutura
💡 Dica: Na prática, PIS, PASEP e NIS compartilham a mesma validação matemática. Portanto, um validador de PIS também validará com perfeição registros de PASEP e NIS.

O Algoritmo de Validação (Módulo 11)

O cálculo do dígito verificador do PIS baseia-se na multiplicação de seus primeiros 10 dígitos por uma lista de pesos específicos, seguida pela divisão modular por 11.

Passo a Passo do Cálculo

  1. Pegue os primeiros 10 dígitos do PIS.
  2. Multiplique cada dígito pelos pesos: 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 (da esquerda para a direita).
  3. Some todos os resultados das multiplicações.
  4. Calcule o resto da divisão da soma por 11.
  5. Subtraia o resto de 11 (Diferença = 11 - resto).
  6. Se a diferença for 10 ou 11, o dígito verificador é 0. Caso contrário, o dígito é a própria diferença.

Exemplo Prático

Vamos validar o PIS hipotético 120.42283.47-5:

Dígitos: 1  2  0  4  2  2  8  3  4  7
Pesos:   3  2  9  8  7  6  5  4  3  2

Multiplicações:
1×3 = 3
2×2 = 4
0×9 = 0
4×8 = 32
2×7 = 14
2×6 = 12
8×5 = 40
3×4 = 12
4×3 = 12
7×2 = 14

Soma = 3 + 4 + 0 + 32 + 14 + 12 + 40 + 12 + 12 + 14 = 145

Resto = 145 % 11 = 2
Dígito = 11 - 2 = 9 (Diferente de 5) → PIS Inválido!

Implementação em JavaScript / TypeScript

Esta função limpa a formatação do input e valida a chave com base no algoritmo oficial:

function validarPIS(pis) {
  // Remove caracteres não numéricos
  const cleaned = pis.replace(/\D/g, "");

  // Deve possuir exatamente 11 dígitos
  if (cleaned.length !== 11) return false;

  // Rejeita padrões conhecidos com dígitos todos repetidos
  if (/^(\d)\1{10}$/.test(cleaned)) return false;

  const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
  let soma = 0;

  for (let i = 0; i < 10; i++) {
    soma += parseInt(cleaned.charAt(i), 10) * pesos[i];
  }

  const resto = soma % 11;
  const diferenca = 11 - resto;
  const digitoVerificador = (diferenca === 10 || diferenca === 11) ? 0 : diferenca;

  return digitoVerificador === parseInt(cleaned.charAt(10), 10);
}

// Exemplos
console.log(validarPIS("120.42283.47-9")); // true
console.log(validarPIS("111.11111.11-1")); // false

Implementação em Python

Uma versão simples e legível em Python para utilizar em seus backend ou scripts de validação de dados:

def validar_pis(pis: str) -> bool:
    # Remove qualquer caractere não numérico
    cleaned = "".join(filter(str.isdigit, pis))

    # Verifica o tamanho do documento
    if len(cleaned) != 11:
        return False

    # Evita falsos positivos com dígitos repetidos
    if len(set(cleaned)) == 1:
        return False

    pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    soma = sum(int(cleaned[i]) * pesos[i] for i in range(10))

    resto = soma % 11
    diferenca = 11 - resto
    
    digito_verificador = 0 if diferenca in (10, 11) else diferenca

    return digito_verificador == int(cleaned[10])

# Exemplos
print(validar_pis("120.42283.47-9"))  # True
print(validar_pis("000.00000.00-0"))  # False

Implementação em C#

using System;
using System.Linq;

public static class PISValidator
{
    public static bool Validate(string pis)
    {
        if (string.IsNullOrEmpty(pis)) return false;
        
        // Remove caracteres não numéricos
        string cleaned = new string(pis.Where(char.IsDigit).ToArray());
        
        if (cleaned.Length != 11) return false;
        
        // Evita repetidos conhecidos
        if (cleaned.Distinct().Count() == 1) return false;
        
        int[] pesos = { 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
        int soma = 0;
        
        for (int i = 0; i < 10; i++)
        {
            soma += (cleaned[i] - '0') * pesos[i];
        }
        
        int resto = soma % 11;
        int diferenca = 11 - resto;
        int digitoVerificador = (diferenca == 10 || diferenca == 11) ? 0 : diferenca;
        
        return digitoVerificador == (cleaned[10] - '0');
    }
}

Erros Comuns na Validação do PIS

  1. Não sanitizar a string: PIS/PASEP costuma vir com traços e pontos no banco de dados. Limpe tudo com regex ou filtros antes de aplicar o cálculo.
  2. Não verificar sequências repetidas: Chaves compostas por apenas um dígito repetido (ex: 111.11111.11-1) podem passar no cálculo aritmético do Módulo 11 por coincidência matemática. Sempre valide a unicidade dos dígitos.
  3. Falta de conversão nas ferramentas: Lembre-se de fornecer links rápidos para geradores de PIS na sua interface de desenvolvimento para que o time de testes consiga gerar massa de dados fictícios sem complicação.

🛠️ Experimente na prática

Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.

PISPASEPvalidaçãoalgoritmodocumentos brasileirosMódulo 11

Esse artigo foi útil para você?