From 6d7ba58f880be618ade07f8ea080fe8c4bf8a896 Mon Sep 17 00:00:00 2001 From: cyfraeviolae Date: Wed, 3 Apr 2024 03:10:44 -0400 Subject: venv --- .../faker/providers/ssn/es_ES/__init__.py | 120 +++++++++++++++++++++ .../ssn/es_ES/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6610 bytes 2 files changed, 120 insertions(+) create mode 100644 venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__init__.py create mode 100644 venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pyc (limited to 'venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES') 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 Binary files /dev/null and b/venv/lib/python3.11/site-packages/faker/providers/ssn/es_ES/__pycache__/__init__.cpython-311.pyc differ -- cgit v1.2.3