Skip to content

Commit

Permalink
feat(issue-63): Complete cpf with zeros with not 11 digits and test it
Browse files Browse the repository at this point in the history
this commit allow validate cpf starts with zeros
  • Loading branch information
Douglas019BR committed Aug 14, 2024
1 parent 904a8d3 commit 68d946d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
14 changes: 14 additions & 0 deletions tests/test_CPF.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
11 changes: 9 additions & 2 deletions validate_docbr/CPF.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down Expand Up @@ -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)

0 comments on commit 68d946d

Please sign in to comment.