Source code for mimesis.builtins.pt_br
"""Specific data provider for Brazil (pt-br)."""
from mimesis.locales import Locale
from mimesis.providers import BaseDataProvider
from mimesis.types import MissingSeed, Seed
__all__ = ["BrazilSpecProvider"]
[docs]
class BrazilSpecProvider(BaseDataProvider):
"""Class that provides special data for Brazil (pt-br)."""
[docs]
def __init__(self, seed: Seed = MissingSeed) -> None:
"""Initialize attributes."""
super().__init__(locale=Locale.PT_BR, seed=seed)
class Meta:
name = "brazil_provider"
datafile = None
@staticmethod
def __get_verifying_digit_cpf(cpf: list[int], weight: int) -> int:
"""Calculate the verifying digit for the CPF.
:param cpf: List of integers with the CPF.
:param weight: Integer with the weight for the modulo 11 calculate.
:returns: The verifying digit for the CPF.
"""
total = 0
for index, digit in enumerate(cpf):
total += digit * (weight - index)
remainder = total % 11
if remainder == 0 or remainder == 1 or remainder >= 11:
return 0
return 11 - remainder
[docs]
def cpf(self, with_mask: bool = True) -> str:
"""Get a random CPF.
:param with_mask: Use CPF mask (###.###.###-##).
:returns: Random CPF.
:Example:
001.137.297-40
"""
cpf_without_dv = [self.random.randint(0, 9) for _ in range(9)]
first_dv = self.__get_verifying_digit_cpf(cpf_without_dv, 10)
cpf_without_dv.append(first_dv)
second_dv = self.__get_verifying_digit_cpf(cpf_without_dv, 11)
cpf_without_dv.append(second_dv)
cpf = "".join(str(i) for i in cpf_without_dv)
if with_mask:
return f"{cpf[:3]}.{cpf[3:6]}.{cpf[6:9]}-{cpf[9:]}"
return cpf
@staticmethod
def __get_verifying_digit_cnpj(cnpj: list[int], weight: int) -> int:
"""Calculate the verifying digit for the CNPJ.
:param cnpj: List of integers with the CNPJ.
:param weight: Integer with the weight for the modulo 11 calculate.
:returns: The verifying digit for the CNPJ.
"""
total = 0
weights_dict = {
5: [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2],
6: [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2],
}
weights = weights_dict[weight]
for i, _ in enumerate(cnpj):
total += weights[i] * cnpj[i]
remainder = total % 11
return 0 if (remainder < 2) else (11 - remainder)
[docs]
def cnpj(self, with_mask: bool = True) -> str:
"""Get a random CNPJ.
:param with_mask: Use cnpj mask (###.###.###-##)
:returns: Random cnpj.
:Example:
77.732.230/0001-70
"""
cnpj_without_dv = [self.random.randint(0, 9) for _ in range(12)]
first_dv = self.__get_verifying_digit_cnpj(cnpj_without_dv, 5)
cnpj_without_dv.append(first_dv)
second_dv = self.__get_verifying_digit_cnpj(cnpj_without_dv, 6)
cnpj_without_dv.append(second_dv)
cnpj = "".join(str(i) for i in cnpj_without_dv)
if with_mask:
return "{}.{}.{}/{}-{}".format(
cnpj[:2], cnpj[2:5], cnpj[5:8], cnpj[8:12], cnpj[12:]
)
return cnpj