Validador de PIS, NIS e PASEP
Digite o número e veja na hora se o tamanho e o dígito verificador estão corretos.
Processamento local: nada do que você digita sai do seu navegador.
Como usar
Digite ou cole o número com 11 dígitos, com ou sem pontos e traço. A resposta aparece enquanto você digita e, quando o dígito verificador está errado, mostra qual era o esperado.
Como o dígito verificador é calculado
PIS, NIS, PASEP e NIT usam o mesmo cálculo. Os 10 primeiros dígitos são multiplicados pelos pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 e somados. O dígito é 11 menos o resto da divisão da soma por 11; se o resultado for 10 ou 11, o dígito é 0.
Isso comprova apenas a consistência matemática do número. A ferramenta não consulta a Caixa, o INSS ou a Receita, então não confirma que o número foi emitido nem a quem pertence.
Como implementar em código
Exemplos prontos para usar no seu projeto.
// PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11)
function pisValido(valor) {
const n = String(valor).replace(/\D/g, ''); // tira pontos e traço
if (n.length !== 11 || /^(\d)\1{10}$/.test(n)) return false;
const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const soma = pesos.reduce((acc, p, i) => acc + p * Number(n[i]), 0);
let dv = 11 - (soma % 11);
if (dv >= 10) dv = 0; // 10 e 11 viram 0
return dv === Number(n[10]);
}
console.log(pisValido('125.64178.44-0')); // trueimport re
def pis_valido(valor: str) -> bool:
"""PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11)."""
n = re.sub(r"\D", "", valor) # tira pontos e traço
if len(n) != 11 or len(set(n)) == 1: # tamanho errado ou dígitos repetidos
return False
pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
soma = sum(p * int(c) for p, c in zip(pesos, n))
dv = 11 - soma % 11
if dv >= 10: # 10 e 11 viram 0
dv = 0
return dv == int(n[10])
print(pis_valido("125.64178.44-0")) # Trueimport "regexp"
var naoDigito = regexp.MustCompile(`\D`)
// PisValido valida PIS/NIS/PASEP (11 dígitos, DV módulo 11).
func PisValido(valor string) bool {
n := naoDigito.ReplaceAllString(valor, "") // tira pontos e traço
if len(n) != 11 {
return false
}
pesos := []int{3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
soma, repetido := 0, true
for i := 0; i < 11; i++ {
if n[i] != n[0] {
repetido = false
}
if i < 10 {
soma += pesos[i] * int(n[i]-'0')
}
}
if repetido {
return false
}
dv := 11 - soma%11
if dv >= 10 { // 10 e 11 viram 0
dv = 0
}
return dv == int(n[10]-'0')
}/// PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11).
bool pisValido(String valor) {
final n = valor.replaceAll(RegExp(r'\D'), ''); // tira pontos e traço
if (n.length != 11 || RegExp(r'^(\d)\1{10}$').hasMatch(n)) return false;
const pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
var soma = 0;
for (var i = 0; i < 10; i++) {
soma += pesos[i] * int.parse(n[i]);
}
var dv = 11 - soma % 11;
if (dv >= 10) dv = 0; // 10 e 11 viram 0
return dv == int.parse(n[10]);
}final class Validador {
/** PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11). */
static boolean pisValido(String valor) {
String n = valor.replaceAll("\\D", ""); // tira pontos e traço
if (n.length() != 11 || n.matches("(\\d)\\1{10}")) 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 += pesos[i] * (n.charAt(i) - '0');
int dv = 11 - soma % 11;
if (dv >= 10) dv = 0; // 10 e 11 viram 0
return dv == n.charAt(10) - '0';
}
}<?php
// PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11)
function pisValido(string $valor): bool {
$n = preg_replace('/\D/', '', $valor); // tira pontos e traço
if (strlen($n) !== 11 || preg_match('/^(\d)\1{10}$/', $n)) return false;
$pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
$soma = 0;
foreach ($pesos as $i => $p) $soma += $p * (int)$n[$i];
$dv = 11 - $soma % 11;
if ($dv >= 10) $dv = 0; // 10 e 11 viram 0
return $dv === (int)$n[10];
}using System.Linq;
using System.Text.RegularExpressions;
public static class Validador
{
// PIS/NIS/PASEP: 11 dígitos, o último é o DV (módulo 11)
public static bool PisValido(string valor)
{
var n = Regex.Replace(valor, @"\D", ""); // tira pontos e traço
if (n.Length != 11 || n.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 += pesos[i] * (n[i] - '0');
int dv = 11 - soma % 11;
if (dv >= 10) dv = 0; // 10 e 11 viram 0
return dv == n[10] - '0';
}
}Perguntas frequentes
PIS, NIS e PASEP são o mesmo número?
Para a validação sim: todos têm 11 dígitos e usam o mesmo cálculo do dígito verificador. O NIT, usado pela Previdência, também segue essa regra.
Por que 000.00000.00-0 é recusado?
Sequências de um só dígito podem passar na conta, mas não são números válidos. Esta ferramenta as rejeita.
A validação confirma que o PIS existe?
Não. Só confere o tamanho e o dígito verificador. A existência depende de consulta oficial.
Veja também
Precisa de um sistema ou app sob medida?
A VcInova desenvolve software, aplicativos e integrações para empresas de todo o Brasil.
Fale com a VcInova