Repository: brazilian-utils/brutils-python (python)

Issue:
Gerar CEPs aleatórios e válidos
Implementar um utilitário que retorna um CEP aleatório válido

Pull request description:
Feature: `generate_cep`
Nova função adicionada:
*gera um cep válido aleatório;
* documentação atualizada;

closes #122 

Patch:
diff --git a/README.md b/README.md
index f1c26c6..807b7e8 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,8 @@ False
   - [remove_symbols_cnpj](#remove_symbols_cnpj)
   - [generate_cnpj](#generate_cnpj)
 - [CEP](#cep)
-  - [is_valid_cep](#is_valid_cep)  
+  - [is_valid_cep](#is_valid_cep)
+  - [generate_cep](#generate_cep)  
 
 ## CPF
 
@@ -142,6 +143,17 @@ Verifica se o CEP é valido. Apenas números, formatados como string. Não verif
 True
 ```
 
+### generate_cep
+
+Gera um CEP válido aleatório.
+
+```python
+>>> from brutils import generate_cep
+>>> generate_cep()
+'77520503'
+```
+
+
 ## Contributing
 
 Sua colaboração é sempre bem-vinda! Preparamos o [arquivo contributing][contributing] pra te ajudar nos primeiros passos. Toda ajuda conta! Sinta-se livre para criar novas [GitHub issues][github-issues] e interagir aqui.
diff --git a/README_EN.md b/README_EN.md
index 43334e8..d461943 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -46,6 +46,7 @@ False
   - [generate_cnpj](#generate_cnpj)
 - [CEP](#cep)
   - [is_valid_cep](#is_valid_cep)  
+  - [generate_cep](#generate_cep)
 
 ## CPF
 
@@ -147,6 +148,16 @@ Check if CEP is valid. Numbers only, formatted as strings. Does not check if CEP
 True
 ```
 
+### generate_cep
+
+Generate a valid random CEP.
+
+```python
+>>> from brutils import generate_cep
+>>> generate_cep()
+'77520503'
+```
+
 ## Contributing
 
 Collaboration is super welcome! We prepared the [contributing file][contributing] to help you in the first steps. Every little bit of help counts! Feel free to create new [GitHub issues][github-issues] and interact here.
diff --git a/brutils/__init__.py b/brutils/__init__.py
index e5d69ce..e2f1aee 100644
--- a/brutils/__init__.py
+++ b/brutils/__init__.py
@@ -12,4 +12,5 @@ from brutils.cnpj import (
 )
 from brutils.cep import (
     is_valid as is_valid_cep,
+    generate as generate_cep,
 )
diff --git a/brutils/cep.py b/brutils/cep.py
index 1c49718..0b17012 100644
--- a/brutils/cep.py
+++ b/brutils/cep.py
@@ -20,3 +20,16 @@ def is_valid(cep):  # type: (str) -> bool
     """
 
     return isinstance(cep, str) and len(cep) == 8 and cep.isdigit()
+
+
+def generate():  # type: () -> str
+    """
+    Generates a random valid CEP digit string. An optional branch
+    number parameter can be given, it defaults to 1.
+    """
+    generated_number = ""
+
+    for _ in range(0, 8):
+        generated_number = generated_number + str(randint(0, 9))
+
+    return generated_number


Test patch:
diff --git a/tests/test_cep.py b/tests/test_cep.py
index b3d18e6..e023061 100644
--- a/tests/test_cep.py
+++ b/tests/test_cep.py
@@ -11,6 +11,7 @@ path.insert(
 )
 from brutils.cep import (
     is_valid,
+    generate,
 )
 from unittest import TestCase, main
 
@@ -29,3 +30,8 @@ class CEP(TestCase):
         # When CEP is valid
         assert is_valid("99999999")
         assert is_valid("88390000")
+
+    def test_generate(self):
+        for _ in range(10_000):
+            assert is_valid(generate())
+        # assert format(generate()) is not None