Validação do PIS/Pasep
Título da Issue: Validação do PIS/Pasep
Seu pedido de recurso está relacionado a um problema? Por favor, descreva.
Gostaria de validar números de PIS/Pasep, retornando um valor booleano que indica se o número é válido ou não. Isso é útil para garantir que os dados inseridos estejam corretos e possam ser utilizados em processos que exigem validação desses registros.
Descreva a solução que você gostaria
- Uma função
is_valid_pis_pasep, que recebe um número de PIS/Pasep (string) e retornaTruese o número for válido eFalsecaso contrário. - A função deve considerar todos os formatos válidos do PIS/Pasep e implementar a lógica de validação específica.
- A função deve lidar com números que tenham sido formatados com símbolos (como pontos ou traços) e garantir que a validação funcione corretamente.
Regras de Validação
A validação do PIS/Pasep é realizada da seguinte forma:
-
Formato: O PIS pode ser composto por 11 dígitos, que podem ser apresentados em formato como
123.45678.90-1ou12345678901. O dígito de controle é o último dígito, que é calculado com base nos 10 primeiros dígitos. -
Cálculo do Dígito de Controle:
- Multiplicar os 10 primeiros dígitos do PIS por uma sequência de pesos que vai de 3 a 1.
- Somar os resultados das multiplicações.
- Dividir a soma por 11 e considerar o resto da divisão.
- O dígito de controle é obtido subtraindo o resto de 11. Se o resultado for maior que 9, o dígito de controle deve ser 0.
-
Validação: A função deve retornar
Truese o PIS/Pasep for válido de acordo com as regras acima eFalsecaso contrário.
Descreva alternativas que você considerou
-
Seguir até o passo 8 do guia de contribuição.
-
Como parte do passo 8, criar o arquivo:
brutils-python/brutils/pis.py.def is_valid_pis_pasep(pis_pasep): # type: (str) -> bool """ Validates a given PIS/Pasep number. This function checks if the provided PIS/Pasep number is valid according to the official validation rules. It returns True if the number is valid, and False otherwise. Args: pis_pasep (str): The PIS/Pasep number to be validated. Returns: bool: True if the PIS/Pasep number is valid, False otherwise. Example: >>> is_valid_pis_pasep('123.45678.90-1') True >>> is_valid_pis_pasep('12345678901') False >>> is_valid_pis_pasep('PIS inválido') False """ # implementar a lógica da função aquiImportar a nova função no arquivo
brutils-python/brutils/__init__.py:# PIS Imports from brutils.pis import ( is_valid_pis_pasep, )E adicionar o nome da nova função na lista
__all__do mesmo arquivobrutils-python/brutils/__init__.py:__all__ = [ ... # PIS 'is_valid_pis_pasep', ] -
Como parte do passo 9, criar o arquivo de teste:
brutils-python/tests/test_pis.py.from unittest import TestCase from brutils.pis import is_valid_pis_pasep class TestPIS(TestCase): def test_is_valid_pis_pasep(self): # Testes para PIS válidos self.assertTrue(is_valid_pis_pasep('123.45678.90-1')) # Formato com símbolos self.assertTrue(is_valid_pis_pasep('12345678901')) # Formato sem símbolos # Testes para PIS inválidos self.assertFalse(is_valid_pis_pasep('1234567890')) # Falta um dígito self.assertFalse(is_valid_pis_pasep('')) # Vazio self.assertFalse(is_valid_pis_pasep('invalid pis')) # Texto não numérico self.assertFalse(is_valid_pis_pasep('123.45678.90-0')) # PIS com dígito de controle inválido # implementar mais casos de teste aqui se necessário -
Seguir os passos seguintes do guia de contribuição.
Contexto adicional
Bora!
Issue 432 atribuida a BeneBr :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."
Reerência mais detalhada parra o cálculo de validação do digito verificador:
- https://macoratti.net/alg_pis.htm
- http://www.cjdinfo.com.br/publicacao-calculo-digito-verificador
Lendo a codebase do projeto, percebi que já existe uma função chamada is_valid_pis no qual já verifica se um pis é valido. Acredito que ao invés de criarmos toda uma outra função, apenas incrementar essa para aceitar números, e mudar o seu nome para o que foi solicitado na issue.
:warning: [PT-BR] Esta issue está inativa há 125 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.
:warning: [EN] This issue has been inactive for 125 days. The assignees will be removed in 7 days if there are no updates.
Bora!
Issue 432 atribuida a laistdomiciano :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."
:warning: [PT-BR] Esta issue está inativa há 66 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.
:warning: [EN] This issue has been inactive for 66 days. The assignees will be removed in 7 days if there are no updates.
Bora!
🇧🇷 Português ✅ Issue #432 atribuída a @Cardan04. Verifique o guia de contribuição para instruções sobre como submeter sua Pull Request.
🇬🇧 English ✅ Issue #432 assigned to @Cardan04. Check the contributing guide for instructions on submitting your Pull Request.
Boa noite pessoal! Vou deixar essa mensagem como info pois vou fechar essa issue pra gente pesquisar um pouco melhor a regra de negócio e evitar de criar algo que não esteja de acordo e pra que ninguém puxe essa issue até que a gente tenha tudo documentado certinho sobre a regra, beleza? Obrigado galera 🫶