PIS/PASEP
O número PIS/PASEP/NIT de inscrição do trabalhador (PIS: Programa de Integração Social).
Validar
- JavaScript, biblioteca
- Python, biblioteca6 casos falham
- Go, biblioteca5 casos falham
- Ruby, biblioteca5 casos falham
- Rust, biblioteca5 casos falham
- .NET, biblioteca5 casos falham
- Erlang, biblioteca6 casos falham
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âmetro | Tipo | Obrigatório |
|---|---|---|
pis | string | sim |
| retorna | boolean |
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'); // falseTeste com JavaScript isValidPis
Casos de teste compartilhados (31) e o resultado em cada biblioteca pis.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca54 casos falham
- Go, biblioteca30 casos falham
- Ruby, biblioteca55 casos falham
- Rust, biblioteca31 casos falham
- .NET, biblioteca31 casos falham
- Erlang, biblioteca54 casos falham
Formata um PIS como 000.00000.00-0.
options.padprimeiro completa o valor com zeros à esquerda até 11 dígitos.options.obfuscate(padrãofalse) oculta com*os 3 primeiros dígitos e o dígito verificador, depois do preenchimento:***.45678.90-*. Funciona junto compade em um valor parcial. Comopad, é lido como verdadeiro ou falso: um não booleano como1também oculta os dígitos, e0nã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.formatepassport.formatnão têm a opçãoobfuscate.- 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,padretornava 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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
options | FormatPisOptions | não |
options.pad | boolean | não |
options.obfuscate | boolean | não |
| retorna | string |
Formata um PIS.
- Opções (
FormatPisOptions):padcompleta o valor com zeros à esquerda até 11 dígitos antes de aplicar a máscara (padrãofalse);obfuscateesconde os 3 primeiros dígitos e o dígito verificador. Um valor vazio, ou sem dígitos, devolve''mesmo compad. - O
obfuscateé aplicado depois dopad. - Nenhuma autoridade publica uma regra de mascaramento para o PIS, então o
obfuscateusa 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-*Teste com JavaScript formatPis
Casos de teste compartilhados (70) e o resultado em cada biblioteca pis.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca1 caso falha
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
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'); // 12345678901Teste com JavaScript parsePis
Casos de teste compartilhados (18) e o resultado em cada biblioteca pis.parse
Gerar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
| retorna | string |
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).
Teste com JavaScript generatePis
Casos de teste compartilhados (1) e o resultado em cada biblioteca pis.generate
Guias
Fontes oficiais
- gov.br/inss/pt-br/…/inscricao
- gov.br/esocial/pt-br/…/mos-manual-de-orientacao-do-esocial-vs-2-4.pdf
- sirc.gov.br/wp-content/uploads/…/manual_sirc_recomendacoes_tecnicas_v7.pdf
- caixa.gov.br/Downloads/fgts-grrf-aplicativo-arquivos/…/Leiaute_Folha_Pgto_GRRF_v204.pdf
- planalto.gov.br/ccivil_03/_ato2007-2010/…/l12309.htm
- planalto.gov.br/ccivil_03/_ato2023-2026/…/L15321.htm
Atualizado em
