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

Validação do RENAVAM

Open camilamaia opened this issue 1 year ago • 8 comments

Seu pedido de recurso está relacionado a um problema? Por favor, descreva.

Preciso de uma função que valide se um número RENAVAM é correto. O RENAVAM é um número único para cada veículo no Brasil, e a validação é crucial para garantir que o número informado está correto e associado a um veículo.

Descreva a solução que você gostaria

  • Uma função is_valid_renavam, que recebe uma string representando o RENAVAM e retorna True se o número for válido e False caso contrário.
  • A função deve verificar se o RENAVAM tem exatamente 11 dígitos.
  • A lógica para calcular o dígito verificador deve ser implementada, conforme descrito anteriormente.
  • A função deve lidar com entradas que não são numéricas, entradas com espaços e outros caracteres não permitidos.
  • A função deve considerar o maior número de edge cases possíveis, como RENAVAM com caracteres especiais e entradas vazias.

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/renavam.py.

    def is_valid_renavam(renavam):  # type: (str) -> bool
        """
        Validates the Brazilian vehicle registration number (RENAVAM).
    
        This function takes a RENAVAM string and checks if it is valid. 
        A valid RENAVAM consists of exactly 11 digits, with the last digit as 
        a verification digit calculated from the previous 10 digits.
    
        Args:
            renavam (str): The RENAVAM string to be validated.
    
        Returns:
            bool: True if the RENAVAM is valid, False otherwise.
    
        Example:
            >>> is_valid_renavam('12345678901')
            True
            >>> is_valid_renavam('12345678900')
            False
            >>> is_valid_renavam('1234567890a')
            False
            >>> is_valid_renavam('12345678 901')
            False
            >>> is_valid_renavam('12345678')  # Less than 11 digits
            False
            >>> is_valid_renavam('')  # Empty string
            False
        """
        # implementar a lógica da função aqui
    

    Importar a nova função no arquivo brutils-python/brutils/__init__.py:

    # RENAVAM Imports
    from brutils.renavam import (
        is_valid_renavam,
    )
    

    E adicionar o nome da nova função na lista __all__ do mesmo arquivo brutils-python/brutils/__init__.py:

    __all__ = [
        ...
        # RENAVAM
        'is_valid_renavam',
    ]
    
  3. Como parte do passo 9, criar o arquivo de teste: brutils-python/tests/test_renavam.py.

    from unittest import TestCase
    from brutils.renavam import is_valid_renavam
    
    class TestRENAVAM(TestCase):
        def test_is_valid_renavam(self):
            # Testes para RENAVAM válidos
            self.assertTrue(is_valid_renavam('12345678901'))  # Supondo que seja válido
            self.assertFalse(is_valid_renavam('12345678900'))  # Supondo que seja inválido
    
            # Testes para entradas inválidas
            self.assertFalse(is_valid_renavam('1234567890a'))  # Contém letra
            self.assertFalse(is_valid_renavam('12345678 901'))  # Contém espaço
            self.assertFalse(is_valid_renavam('12345678'))  # Menos de 11 dígitos
            self.assertFalse(is_valid_renavam(''))  # String vazia
            self.assertFalse(is_valid_renavam('123456789012'))  # Mais de 11 dígitos
            self.assertFalse(is_valid_renavam('abcdefghijk'))  # Apenas letras
            self.assertFalse(is_valid_renavam('12345678901!'))  # Contém caractere especial
    
            # implementar mais casos de teste aqui se necessário
    
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

  • https://pt.wikipedia.org/wiki/Registro_Nacional_de_Ve%C3%ADculos_Automotores
  • https://siga0984.wordpress.com/2019/05/01/algoritmos-validacao-de-renavam/

camilamaia avatar Oct 21 '24 15:10 camilamaia

Posso pegar?

LucasAlvws avatar Oct 21 '24 18:10 LucasAlvws

"A lógica para calcular o dígito verificador deve ser implementada, conforme descrito anteriormente.", não consegui entender qual é a lógica. É apenas verificar se há 11 digitos numéricos?

LucasAlvws avatar Oct 21 '24 19:10 LucasAlvws

@camilamaia

LucasAlvws avatar Oct 23 '24 16:10 LucasAlvws

bora!

Oleari19 avatar Jan 28 '25 21:01 Oleari19

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

github-actions[bot] avatar Jan 28 '25 21:01 github-actions[bot]

:warning: [PT-BR] Esta issue está inativa há 104 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.

:warning: [EN] This issue has been inactive for 104 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]

bora

Fontebasso-JV avatar Oct 27 '25 17:10 Fontebasso-JV

🇧🇷 Português ✅ Issue #430 atribuída a @Fontebasso-JV. Verifique o guia de contribuição para instruções sobre como submeter sua Pull Request.

🇬🇧 English ✅ Issue #430 assigned to @Fontebasso-JV. Check the contributing guide for instructions on submitting your Pull Request.

github-actions[bot] avatar Oct 27 '25 17:10 github-actions[bot]