Validação de RG
Seu pedido de recurso está relacionado a um problema? Por favor, descreva.
Precisamos de uma função que valide o Registro Geral (RG) brasileiro, considerando que cada estado pode ter um formato de RG diferente. Além disso, alguns estados podem ter regras específicas, como a presença de letras ou dígitos no formato. Queremos validar um RG para garantir sua autenticidade em diferentes contextos.
Descreva a solução que você gostaria
- Uma função
is_valid_rg, que recebe como entrada o RG (string) e a Unidade Federativa (UF) e retorna um valor booleano indicando se o RG é válido. - Caso o RG seja inválido, a função deve retornar
False. - A função deve lidar com todos os formatos de RG dos diferentes estados brasileiros.
- Considerar possíveis edge cases, como RGs com dígitos repetidos, tamanhos fora do padrão e símbolos inválidos.
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/rg.py.def is_valid_rg(rg, uf): # type: (str, str) -> bool """ Validates a Brazilian RG (Registro Geral) based on the state (UF). This function checks whether a given RG is valid for a specific state in Brazil. Each state may have its own RG format, and the function should handle these differences. Args: rg (str): The RG to be validated. uf (str): The state (UF) for which the RG should be validated. Returns: bool: Returns True if the RG is valid, or False if it is invalid. Example: >>> is_valid_rg('12.345.678-9', 'SP') True >>> is_valid_rg('MG-12.345.678', 'MG') True >>> is_valid_rg('123456789', 'RJ') False >>> is_valid_rg('A12345678', 'SP') False >>> is_valid_rg('12.345.678', 'SP') False """ # implementar a lógica da função aquiImportar a nova função no arquivo
brutils-python/brutils/__init__.py:# RG Imports from brutils.rg import ( is_valid_rg, )E adicionar o nome da nova função na lista
__all__do mesmo arquivobrutils-python/brutils/__init__.py:__all__ = [ ... # RG 'is_valid_rg', ] -
Como parte do passo 9, criar o arquivo de teste:
brutils-python/tests/test_rg.py.from unittest import TestCase from brutils.rg import is_valid_rg class TestRG(TestCase): def test_is_valid_rg(self): # Testes para RGs válidos self.assertTrue(is_valid_rg('12.345.678-9', 'SP')) self.assertTrue(is_valid_rg('MG-12.345.678', 'MG')) self.assertTrue(is_valid_rg('123456789', 'RJ')) # Testes para RGs inválidos self.assertFalse(is_valid_rg('A12345678', 'SP')) # Letras não permitidas self.assertFalse(is_valid_rg('1234567890', 'SP')) # RG longo demais self.assertFalse(is_valid_rg('12.345.678-10', 'SP')) # Dígito verificador incorreto # Testes para entradas malformadas self.assertFalse(is_valid_rg('', 'SP')) # Entrada vazia self.assertFalse(is_valid_rg('12.345.678', 'SP')) # Formato incorreto sem dígito verificador self.assertFalse(is_valid_rg('12.345.678-9', 'XX')) # UF inválida -
Seguir os passos seguintes do guia de contribuição.
Contexto adicional
- Cada estado brasileiro pode ter um formato de RG ligeiramente diferente, então a função deve lidar com essas variações regionais.
- A função deve ser capaz de identificar formatos incorretos, dígitos repetidos e RGs malformados.
Links de Referência
- https://pt.wikipedia.org/wiki/Carteira_de_Identidade_Nacional
- http://www.profcardy.com/cardicas/rg.php
- https://pt.wikipedia.org/wiki/D%C3%ADgito_verificador
bora!
Issue 428 atribuida a vianaz :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."
bora!
:warning: [PT-BR] Esta issue está inativa há 92 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.
:warning: [EN] This issue has been inactive for 92 days. The assignees will be removed in 7 days if there are no updates.
Importante notar que existem dois PRs abertos atualmente que propõe uma solução para essa issue!
- https://github.com/brazilian-utils/brutils-python/pull/498
- https://github.com/brazilian-utils/brutils-python/pull/488
:warning: [PT-BR] Esta issue está inativa há 60 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.
:warning: [EN] This issue has been inactive for 60 days. The assignees will be removed in 7 days if there are no updates.
:warning: [PT-BR] Esta issue está inativa há 62 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.
:warning: [EN] This issue has been inactive for 62 days. The assignees will be removed in 7 days if there are no updates.
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 🫶