From 68d946d4b2b02059d4a46ddab999cd672f9ba032 Mon Sep 17 00:00:00 2001 From: DOUG Date: Mon, 27 May 2024 10:15:51 -0300 Subject: [PATCH] feat(issue-63): Complete cpf with zeros with not 11 digits and test it this commit allow validate cpf starts with zeros --- tests/test_CPF.py | 14 ++++++++++++++ validate_docbr/CPF.py | 11 +++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/test_CPF.py b/tests/test_CPF.py index ffd9455..8de7a11 100644 --- a/tests/test_CPF.py +++ b/tests/test_CPF.py @@ -56,3 +56,17 @@ 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', '00123456789'), # 9 digits + ('12345678901', '12345678901'), # 11 digits + ('1234567', '00001234567'), # 7 digits + ] + for cpf_input, expected_output in cases: + self.assertEqual(self.cpf._complete_with_zeros(cpf_input), expected_output) + + # Test if the input is already correct length, it should not add zeros + self.assertEqual(self.cpf._complete_with_zeros('00123456789'), '00123456789') + self.assertEqual(self.cpf._complete_with_zeros('23456789012'), '23456789012') \ No newline at end of file diff --git a/validate_docbr/CPF.py b/validate_docbr/CPF.py index 152137f..3f87eae 100644 --- a/validate_docbr/CPF.py +++ b/validate_docbr/CPF.py @@ -19,13 +19,15 @@ def validate(self, doc: str = '') -> bool: doc = list(self._only_digits(doc)) if len(doc) != 11: - return False + doc = self._complete_with_zeros(doc) + if len(doc) != 11: + return False 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 +78,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: list[str]) -> list[str]: + """Adiciona zeros a esquerda para completar o CPF.""" + + return '0' * (11 - len(doc)) + str(doc)