PIS/PASEP

O número PIS/PASEP/NIT de inscrição do trabalhador (PIS: Programa de Integração Social).

  • Matriz de paridade

Validar

Valida um PIS/PASEP/NIT: 10 dígitos base e um dígito verificador por módulo 11.

  • Nenhuma fonte oficial publica os pesos do dígito verificador. O MOS do eSocial dá 11 dígitos com o dígito verificador, e o manual do SIRC diz que o dígito verificador usa módulo 11; os leiautes da Caixa pedem só um "Número de PIS/PASEP válido". Os pesos seguem uma referência da comunidade (brutils).
  • A função ignora espaços em branco e os caracteres ., -, /, (, ), , e *, em qualquer quantidade e posição. Qualquer outro caractere torna o valor inválido. São exigidos exatamente 11 dígitos depois de removidos, e o dígito verificador precisa conferir.
  • Os pesos do dígito verificador são 3, 2, 9, 8, 7, 6, 5, 4, 3 e 2 sobre os 10 primeiros dígitos, com módulo 11.
  • Só uma string é lida. Qualquer outro tipo retorna false.

Decisão pendente

A referência (JS) rejeita como número reservado um valor com todos os dígitos iguais. As outras bibliotecas aceitam esses valores quando o dígito verificador confere. Veja a decisão em aberto em docs/findings.md (em inglês).

Decisão pendente

A referência (JS) ignora esses caracteres de formatação e os espaços em branco. Outras bibliotecas aceitam apenas dígitos. Veja a decisão em aberto em docs/findings.md (em inglês).

ParâmetroTipoObrigatório
pisstringsim
retornaboolean

Valida um PIS. Aceita o valor com ou sem máscara.

  • Um valor com todos os dígitos iguais é rejeitado.
  • O dígito verificador usa os pesos 3, 2, 9, 8, 7, 6, 5, 4, 3 e 2 e módulo 11. Nenhum documento oficial encontrado publica esses pesos: os manuais do eSocial e do SIRC dizem só que o número tem 11 dígitos e dígito verificador módulo 11, e os leiautes da Caixa pedem um "Número de PIS/PASEP válido" sem dizer como ele é calculado. Os pesos seguem o brutils.
import { isValidPis } from '@brazilian-utils/brazilian-utils';

isValidPis('12056412847'); // true
isValidPis('12056412547'); // false
Código: brazilian-utils/javascript
Teste com JavaScript isValidPis
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (31) e o resultado em cada biblioteca pis.isValid

Formatar

Formata um PIS como 000.00000.00-0.

  • options.pad primeiro completa o valor com zeros à esquerda até 11 dígitos.
  • options.obfuscate (padrão false) oculta com * os 3 primeiros dígitos e o dígito verificador, depois do preenchimento: ***.45678.90-*. Funciona junto com pad e em um valor parcial. Como pad, é lido como verdadeiro ou falso: um não booleano como 1 também oculta os dígitos, e 0 não oculta.
  • Nenhuma autoridade publica uma regra de mascaramento para o PIS. A regra é uma analogia com a que as Leis de Diretrizes Orçamentárias fixam para publicar um CPF ("ocultar os três primeiros dígitos e os dois dígitos verificadores", Lei nº 12.309/2010, art. 87, § 5º, repetida até a LDO 2026, Lei nº 15.321/2025, art. 163), não uma norma publicada.
  • cns.format e passport.format não têm a opção obfuscate.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número, descartando sinal e ponto decimal).
  • Um valor sem dígitos (vazio, ou só letras e símbolos) retorna uma string vazia mesmo com options.pad. Até a 2.4.0, pad retornava a máscara inteira de zeros (000.00000.00-0).
  • Os dígitos depois do 11º são descartados.

Decisão pendente

A referência (JS) formata só os caracteres que um valor incompleto tem e retorna uma string vazia para entrada vazia ou inválida. Outras bibliotecas retornam null. Veja a decisão em aberto em docs/findings.md (em inglês).

ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatPisOptionsnão
options.padbooleannão
options.obfuscatebooleannão
retornastring

Formata um PIS.

  • Opções (FormatPisOptions): pad completa o valor com zeros à esquerda até 11 dígitos antes de aplicar a máscara (padrão false); obfuscate esconde os 3 primeiros dígitos e o dígito verificador. Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • O obfuscate é aplicado depois do pad.
  • Nenhuma autoridade publica uma regra de mascaramento para o PIS, então o obfuscate usa a que as Leis de Diretrizes Orçamentárias definem para a divulgação do CPF ("ocultar os três primeiros dígitos e os dois dígitos verificadores", Lei nº 14.194/2021, art. 149, regra criada pela Lei nº 12.309/2010, art. 87, § 5º), um número com a mesma estrutura.
import { formatPis } from '@brazilian-utils/brazilian-utils';

formatPis('12345678901'); // 123.45678.90-1
formatPis('123456789', { pad: true }); // 001.23456.78-9
formatPis('12345678901', { obfuscate: true }); // ***.45678.90-*
Código: brazilian-utils/javascript
Teste com JavaScript formatPis
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (70) e o resultado em cada biblioteca pis.format

Interpretar

Remove a formatação do PIS e mantém apenas os dígitos, com no máximo 11 dígitos (os dígitos depois do 11º são descartados).

  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número, descartando sinal e ponto decimal).
  • Um valor sem dígitos retorna uma string vazia.
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do PIS, mantém apenas os dígitos e limita o resultado a 11 dígitos.

import { parsePis } from '@brazilian-utils/brazilian-utils';

parsePis('123.45678.90-1'); // 12345678901
Código: brazilian-utils/javascript
Teste com JavaScript parsePis
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (18) e o resultado em cada biblioteca pis.parse

Gerar

Gera um PIS aleatório e válido: 11 dígitos, sem máscara.

  • Nenhuma fonte oficial publica os pesos do dígito verificador. O MOS do eSocial dá 11 dígitos com o dígito verificador, e o manual do SIRC diz que o dígito verificador usa módulo 11; os leiautes da Caixa pedem só um "Número de PIS/PASEP válido". Os pesos seguem uma referência da comunidade (brutils).
ParâmetroTipoObrigatório
retornastring

Gera um PIS válido aleatório.

import { generatePis } from '@brazilian-utils/brazilian-utils';

generatePis(); // '91077906857'

Fonte: Lei nº 14.194/2021, art. 149, a regra de mascaramento do CPF que o obfuscate toma emprestada, criada pela Lei nº 12.309/2010, art. 87, § 5º e repetida pelas LDOs seguintes (a de 2026, Lei nº 15.321/2025, art. 163, a repete).

Código: brazilian-utils/javascript
Teste com JavaScript generatePis
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (1) e o resultado em cada biblioteca pis.generate

Guias

Fontes oficiais

Atualizado em

Nesta página