brazilian-utils / brutils-python

Biblioteca de utilitários projetada para validar, gerar e manipular dados de acordo com as particularidades do Brasil 🇧🇷
https://pypi.python.org/pypi/brutils
MIT License
242 stars 58 forks source link

Validação de CNH #431

Open camilamaia opened 3 days ago

camilamaia commented 3 days ago

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

Gostaria de implementar uma função para validar a CNH (Carteira Nacional de Habilitação) brasileira. Essa funcionalidade é útil para verificar a autenticidade e a validade do número da CNH fornecido, garantindo que ele esteja em conformidade com os critérios de formatação e validação.

Descreva a solução que você gostaria

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

    def is_valid_cnh(cnh: str) -> bool:
        """
        Validates the Brazilian CNH (Carteira Nacional de Habilitação).
    
        This function checks if the given CNH is valid based on the format and allowed characters.
        It considers the CNH with or without the verification character.
    
        Args:
            cnh (str): The CNH number to be validated.
    
        Returns:
            bool: True if the CNH is valid, False otherwise.
    
        Example:
            >>> is_valid_cnh('12345678900')
            True
            >>> is_valid_cnh('AB123456789')
            False
            >>> is_valid_cnh('123456789012345')
            True
            >>> is_valid_cnh('12345')
            False
        """
        # implementar a lógica da função aqui

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

    # CNH Imports
    from brutils.cnh import (
        is_valid_cnh,
    )

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

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

    from unittest import TestCase
    from brutils.cnh import is_valid_cnh
    
    class TestCNH(TestCase):
        def test_is_valid_cnh(self):
            # Testes para CNHs válidas
            self.assertTrue(is_valid_cnh('12345678900'))
            self.assertTrue(is_valid_cnh('123456789012345'))
            self.assertTrue(is_valid_cnh('ABCDE123456789'))
    
            # Testes para CNHs inválidas
            self.assertFalse(is_valid_cnh('AB123456789'))  # Formato inválido
            self.assertFalse(is_valid_cnh('12345'))  # Muito curto
            self.assertFalse(is_valid_cnh('1234567890123456'))  # Muito longo
            self.assertFalse(is_valid_cnh('1234-5678'))  # Caracteres não permitidos
            self.assertFalse(is_valid_cnh(''))  # Vazio
    
            # implementar mais casos de teste aqui se necessário
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

LucasAlvws commented 1 day ago

Posso pegar?

LucasAlvws commented 1 day ago

@camilamaia