Skip to content

Instantly share code, notes, and snippets.

@cayusmatias
Last active April 10, 2024 13:24
Show Gist options
  • Save cayusmatias/f7a98fe2bea7b9fea91b5d44bcea7165 to your computer and use it in GitHub Desktop.
Save cayusmatias/f7a98fe2bea7b9fea91b5d44bcea7165 to your computer and use it in GitHub Desktop.
Função Python para validar número de benefício previdenciário NB, bem como NIT e PIS
import re
def valida_nit_nb(valor):
"""
Valida um número de NIT/NB (Número de Identificação do Trabalhador).
Parâmetros:
- valor (str|int): Número do NIT/NB a ser validado.
Retorna:
- bool: True se o NIT/NB é válido, False caso contrário.
"""
# Converte para string e remove caracteres não numéricos
valor = re.sub('[^0-9]', '', str(valor))
# Verifica se o tamanho é adequado e ajusta se necessário
if len(valor) > 11:
return False # Mais de 11 dígitos não são válidos
elif len(valor) < 11:
valor = valor.zfill(11) # Adiciona zeros à esquerda se menos de 11 dígitos
# Prepara os pesos para o cálculo do dígito verificador
pesos = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
# Calcula a soma dos produtos dos dígitos pelos pesos
total = sum(int(digito) * peso for digito, peso in zip(valor, pesos))
# Calcula o dígito verificador
resto = total % 11
dv = 0 if resto < 2 else 11 - resto
# Compara o dígito verificador calculado com o último dígito do valor
return dv == int(valor[-1])
# Exemplos de uso
print(valida_nit_nb('12345678901')) # Exemplo que deve retornar False
print(valida_nit_nb('12345678900')) # Exemplo que deve retornar True se o DV estiver correto
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment