Description
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 aqui
Importar 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