Ferramentas / Validador de PIS, NIS e PASEP

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')); // true
    import 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"))  # True
    import "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