summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX')
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__init__.py261
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__pycache__/__init__.cpython-311.pycbin10138 -> 0 bytes
2 files changed, 0 insertions, 261 deletions
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__init__.py b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__init__.py
deleted file mode 100644
index 02e6481..0000000
--- a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__init__.py
+++ /dev/null
@@ -1,261 +0,0 @@
-"""
-SSN provider for es_MX.
-
-This module adds a provider for mexican SSN, along with Unique Population
-Registry Code (CURP) and Federal Taxpayer Registry ID (RFC).
-"""
-
-import random
-import string
-
-from typing import Optional
-
-from .. import Provider as BaseProvider
-
-try:
- from typing import Literal # type: ignore
-except ImportError:
- from typing_extensions import Literal # type: ignore
-
-
-ALPHABET = string.ascii_uppercase
-ALPHANUMERIC = string.digits + ALPHABET
-VOWELS = "AEIOU"
-CONSONANTS = [letter for letter in ALPHABET if letter not in VOWELS]
-
-# https://es.wikipedia.org/wiki/Plantilla:Abreviaciones_de_los_estados_de_M%C3%A9xico
-STATES_RENAPO = [
- "AS",
- "BC",
- "BS",
- "CC",
- "CS",
- "CH",
- "DF",
- "CL",
- "CM",
- "DG",
- "GT",
- "GR",
- "HG",
- "JC",
- "MC",
- "MN",
- "MS",
- "NT",
- "NL",
- "OC",
- "PL",
- "QO",
- "QR",
- "SP",
- "SL",
- "SR",
- "TC",
- "TS",
- "TL",
- "VZ",
- "YN",
- "ZS",
- "NE", # Foreign Born
-]
-
-FORBIDDEN_WORDS = {
- "BUEI": "BUEX",
- "BUEY": "BUEX",
- "CACA": "CACX",
- "CACO": "CACX",
- "CAGA": "CAGX",
- "CAGO": "CAGX",
- "CAKA": "CAKX",
- "CAKO": "CAKX",
- "COGE": "COGX",
- "COJA": "COJX",
- "COJE": "COJX",
- "COJI": "COJX",
- "COJO": "COJX",
- "CULO": "CULX",
- "FETO": "FETX",
- "GUEY": "GUEX",
- "JOTO": "JOTX",
- "KACA": "KACX",
- "KACO": "KACX",
- "KAGA": "KAGX",
- "KAGO": "KAGX",
- "KOGE": "KOGX",
- "KOJO": "KOJX",
- "KAKA": "KAKX",
- "KULO": "KULX",
- "MAME": "MAMX",
- "MAMO": "MAMX",
- "MEAR": "MEAX",
- "MEAS": "MEAX",
- "MEON": "MEOX",
- "MION": "MIOX",
- "MOCO": "MOCX",
- "MULA": "MULX",
- "PEDA": "PEDX",
- "PEDO": "PEDX",
- "PENE": "PENX",
- "PUTA": "PUTX",
- "PUTO": "PUTX",
- "QULO": "QULX",
- "RATA": "RATX",
- "RUIN": "RUIN",
-}
-
-CURP_CHARACTERS = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
-
-
-def _reduce_digits(number: int) -> int:
- """
- Sum of digits of a number until sum becomes single digit.
-
- Example:
- 658 => 6 + 5 + 8 = 19 => 1 + 9 = 10 => 1
- """
- if number == 0:
- return 0
- if number % 9 == 0:
- return 9
-
- return number % 9
-
-
-def ssn_checksum(digits: map) -> int:
- """
- Calculate the checksum for the mexican SSN (IMSS).
- """
- return -sum(_reduce_digits(n * (i % 2 + 1)) for i, n in enumerate(digits)) % 10
-
-
-def curp_checksum(characters: str) -> int:
- """
- Calculate the checksum for the mexican CURP.
- """
- start = 18
- return -sum((start - i) * CURP_CHARACTERS.index(n) for i, n in enumerate(characters)) % 10
-
-
-class Provider(BaseProvider):
- """
- A Faker provider for the Mexican SSN, RFC and CURP
- """
-
- ssn_formats = ("###########",)
-
- def ssn(self) -> str:
- """
- Mexican Social Security Number, as given by IMSS.
-
- :return: a random Mexican SSN
- """
- office = self.random_int(min=1, max=99)
- birth_year = self.random_int(min=0, max=99)
- start_year = self.random_int(min=0, max=99)
- serial = self.random_int(min=1, max=9999)
-
- num = f"{office:02d}{start_year:02d}{birth_year:02d}{serial:04d}"
-
- check = ssn_checksum(map(int, num))
- num += str(check)
-
- return num
-
- def curp(self) -> str:
- """
- See https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Registro_de_Poblaci%C3%B3n.
-
- :return: a random Mexican CURP (Unique Population Registry Code)
- """
- birthday = self.generator.date_of_birth()
-
- first_surname = random.choice(ALPHABET) + random.choice(VOWELS)
- second_surname = random.choice(ALPHABET)
- given_name = random.choice(ALPHABET)
- name_initials = first_surname + second_surname + given_name
-
- birth_date = birthday.strftime("%y%m%d")
- gender = random.choice("HM")
- state = random.choice(STATES_RENAPO)
- first_surname_inside = random.choice(CONSONANTS)
- second_surname_inside = random.choice(CONSONANTS)
- given_name_inside = random.choice(ALPHABET)
-
- # This character is assigned to avoid duplicity
- # It's normally '0' for those born < 2000
- # and 'A' for those born >= 2000
- assigned_character = "0" if birthday.year < 2000 else "A"
-
- name_initials = FORBIDDEN_WORDS.get(name_initials, name_initials)
-
- random_curp = (
- name_initials
- + birth_date
- + gender
- + state
- + first_surname_inside
- + second_surname_inside
- + given_name_inside
- + assigned_character
- )
-
- random_curp += str(curp_checksum(random_curp))
-
- return random_curp
-
- def rfc(self, natural: bool = True) -> str:
- """
- See https://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes
-
- :param natural: Whether to return the RFC of a natural person.
- Otherwise return the RFC of a legal person.
- :type natural: bool
- :return: a random Mexican RFC
- """
- birthday = self.generator.date_of_birth()
-
- if natural:
- first_surname = random.choice(ALPHABET) + random.choice(VOWELS)
- second_surname = random.choice(ALPHABET)
- given_name = random.choice(ALPHABET)
- name_initials = first_surname + second_surname + given_name
- name_initials = FORBIDDEN_WORDS.get(name_initials, name_initials)
- else:
- name_initials = (
- self.random_uppercase_letter() + self.random_uppercase_letter() + self.random_uppercase_letter()
- )
-
- birth_date = birthday.strftime("%y%m%d")
- disambiguation_code = random.choice(ALPHANUMERIC) + random.choice(ALPHANUMERIC) + random.choice(ALPHANUMERIC)
-
- random_rfc = name_initials + birth_date + disambiguation_code
-
- return random_rfc
-
- def elector_code(self, gender: Optional[Literal["H", "M"]] = None) -> str:
- """
- Unique elector code issued by INE (Instituto Nacional Electoral) in Mexico.
-
- :param gender: Gender for which to generate the code. Will be randomly
- selected if not provided.
- :type gender: str
- :return: a random INE elector code
-
- :sample:
- :sample: gender='M'
- """
- if gender and gender not in ("H", "M"):
- raise ValueError("Gender must be 'H' or 'M'")
-
- gender = gender or random.choice(["H", "M"])
-
- consonants = "".join(random.choices(CONSONANTS, k=6))
-
- birthday = self.generator.date_of_birth()
- birth_date = birthday.strftime("%y%m%d")
-
- entity = random.randint(1, 33)
- disambiguation_code = "".join(random.choices(string.digits, k=3))
-
- return f"{consonants}{birth_date}{entity:02d}{gender}{disambiguation_code}"
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index acb2f5d..0000000
--- a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_MX/__pycache__/__init__.cpython-311.pyc
+++ /dev/null
Binary files differ