Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validação do RENAVAM #430

Open
camilamaia opened this issue Oct 21, 2024 · 3 comments · May be fixed by #440
Open

Validação do RENAVAM #430

camilamaia opened this issue Oct 21, 2024 · 3 comments · May be fixed by #440

Comments

@camilamaia
Copy link
Member

camilamaia commented Oct 21, 2024

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

@LucasAlvws
Copy link

Posso pegar?

@LucasAlvws
Copy link

"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 LucasAlvws linked a pull request Oct 23, 2024 that will close this issue
10 tasks
LucasAlvws added a commit to LucasAlvws/brutils-python that referenced this issue Oct 23, 2024
LucasAlvws added a commit to LucasAlvws/brutils-python that referenced this issue Oct 23, 2024
@LucasAlvws
Copy link

@camilamaia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants