Last active
April 10, 2024 13:24
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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