brutils-python icon indicating copy to clipboard operation
brutils-python copied to clipboard

Validação de RG

Open camilamaia opened this issue 1 year ago • 7 comments

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

  1. Seguir até o passo 8 do guia de contribuição.

  2. 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 arquivo brutils-python/brutils/__init__.py:

    __all__ = [
        ...
        # RG
        'is_valid_rg',
    ]
    
  3. 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
    
  4. 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

camilamaia avatar Oct 21 '24 14:10 camilamaia

bora!

vianaz avatar Nov 26 '24 10:11 vianaz

Issue 428 atribuida a vianaz :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."

github-actions[bot] avatar Nov 26 '24 10:11 github-actions[bot]

bora!

Vini47 avatar Feb 09 '25 21:02 Vini47

: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.

github-actions[bot] avatar May 13 '25 16:05 github-actions[bot]

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

camilamaia avatar May 13 '25 17:05 camilamaia

: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.

github-actions[bot] avatar Jul 13 '25 01:07 github-actions[bot]

: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.

github-actions[bot] avatar Sep 14 '25 00:09 github-actions[bot]

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 🫶

niltonpimentel02 avatar Nov 13 '25 22:11 niltonpimentel02