summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES')
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__init__.py120
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pycbin0 -> 6610 bytes
2 files changed, 120 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__init__.py b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__init__.py
new file mode 100644
index 0000000..0d32189
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__init__.py
@@ -0,0 +1,120 @@
+import random
+
+from .. import Provider as BaseProvider
+
+
+class Provider(BaseProvider):
+ """
+ A Faker provider for the Spanish VAT IDs and DOIs
+ """
+
+ vat_id_formats = (
+ "ES?########",
+ "ES########?",
+ "ES?#######?",
+ )
+
+ def vat_id(self) -> str:
+ """
+ http://ec.europa.eu/taxation_customs/vies/faq.html#item_11
+ :return: a random Spanish VAT ID
+ """
+
+ return self.bothify(self.random_element(self.vat_id_formats))
+
+ def nie(self) -> str:
+ """
+ https://es.wikipedia.org/wiki/N%C3%BAmero_de_identidad_de_extranjero
+ :return: a random Spanish NIE
+ """
+
+ first_chr = random.randrange(0, 3)
+ doi_body = str(random.randrange(0, 10000000)).zfill(7)
+ control = self._calculate_control_doi(str(first_chr) + doi_body)
+ return "XYZ"[first_chr] + doi_body + control
+
+ def nif(self) -> str:
+ """
+ https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal
+ :return: NIF
+ """
+
+ nie_body = str(random.randrange(0, 100000000)) # generate a number of a maximum of 8 characters long
+ return nie_body.zfill(8) + self._calculate_control_doi(nie_body)
+
+ def cif(self) -> str:
+ """
+ https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
+ :return: a random Spanish CIF
+ """
+
+ first_chr = random.choice("ABCDEFGHJNPQRSUVW")
+ doi_body = str(random.randrange(0, 10000000)).zfill(7)
+ cif = first_chr + doi_body
+ return cif + self._calculate_control_cif(cif)
+
+ def doi(self) -> str:
+ """
+ https://es.wikipedia.org/wiki/Identificador_de_objeto_digital
+ :return: a random Spanish CIF or NIE or NIF
+ """
+
+ return random.choice([self.cif, self.nie, self.nif])()
+
+ def nuss(self, company: bool = False) -> str:
+ """
+ :param company: flag to indicate if we should generate a company NUSS
+ :return: a random Spanish Social Security Number (NĂºmero de la Seguridad Social)
+ """
+ nuss_body_length = 8
+ if company:
+ nuss_body_length = 7
+ province_digits = f"{random.choice(list(range(1, 54)) + [66]):02d}"
+ nuss_body = "".join(str(random.randint(0, 9)) for _ in range(nuss_body_length))
+ control_digits = f"{int(province_digits+nuss_body) % 97:02d}"
+ nuss = f"{province_digits}{nuss_body}{control_digits}"
+ return nuss
+
+ @staticmethod
+ def _calculate_control_doi(doi: str) -> str:
+ """
+ Calculate the letter that corresponds to the end of a DOI
+ :param doi: calculated value so far needing a control character
+ :return: DOI control character
+ """
+
+ lookup = "TRWAGMYFPDXBNJZSQVHLCKE"
+ return lookup[int(doi) % 23]
+
+ @classmethod
+ def _calculate_control_cif(cls, cif: str) -> str:
+ """
+ Calculate the letter that corresponds to the end of a CIF
+ :param cif: calculated value so far needing a control character
+ :return: CIF control character
+
+ Code was converted from the minified js of: https://generadordni.es/
+ """
+
+ sum_ = 0
+ first_chr, cif_value = cif[0], cif[1:]
+ for index, char in enumerate(cif_value):
+ if index % 2:
+ sum_ += int(char)
+ else:
+ sum_ += sum(map(int, str(int(char) * 2)))
+ if sum_ > 10:
+ sum_ = int(str(sum_)[-1])
+ else:
+ sum_ = sum_
+ sum_ = 10 - (sum_ % 10)
+
+ if first_chr in ["F", "J", "K", "N", "P", "Q", "R", "S", "U", "V", "W"]:
+ return chr(64 + sum_)
+ elif first_chr in ["A", "B", "C", "D", "E", "F", "G", "H", "L", "M"]:
+ if sum_ == 10:
+ sum_ = 0
+ return str(sum_)
+ else: # K, L, M # pragma: no cover
+ # Old format that is no longer used, here for full compatability
+ return cls._calculate_control_doi(cif) # pragma: no cover
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..58d9eef
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pyc
Binary files differ