diff --git a/tests/test_CPF.py b/tests/test_CPF.py index ffd9455..4707d4d 100644 --- a/tests/test_CPF.py +++ b/tests/test_CPF.py @@ -56,3 +56,14 @@ def test_special_case(self): ] for cpf, is_valid in cases: self.assertEqual(self.cpf.validate(cpf), is_valid) + + def test_add_leading_zeros(self): + """Verifica se o método de adicionar zeros à esquerda funciona corretamente.""" + cases = [ + ('123456789', False), # 9 digitos + ('12345678901', False), # 11 digitos + ('1234567', False), # 7 digitos + ('9380826044', True) # cpf valido + ] + for cpf_input, is_valid in cases: + self.assertEqual(self.cpf.validate(cpf_input), is_valid) diff --git a/validate_docbr/CPF.py b/validate_docbr/CPF.py index 152137f..458458f 100644 --- a/validate_docbr/CPF.py +++ b/validate_docbr/CPF.py @@ -18,14 +18,14 @@ def validate(self, doc: str = '') -> bool: doc = list(self._only_digits(doc)) - if len(doc) != 11: - return False + if len(doc) < 11: + doc = self._complete_with_zeros(doc) if not self.repeated_digits and self._check_repeated_digits(doc): return False return self._generate_first_digit(doc) == doc[9] \ - and self._generate_second_digit(doc) == doc[10] + and self._generate_second_digit(doc) == doc[10] def generate(self, mask: bool = False) -> str: """Gerar CPF.""" @@ -76,3 +76,8 @@ def _check_repeated_digits(self, doc: List[str]) -> bool: """Verifica se é um CPF com números repetidos. Exemplo: 111.111.111-11""" return len(set(doc)) == 1 + + def _complete_with_zeros(self, doc: str) -> list[str]: + """Adiciona zeros à esquerda para completar o CPF.""" + zeros_needed = 11 - len(doc) + return ['0'] * zeros_needed + doc