HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/faker/providers/ssn/cs_CZ/__init__.py
from math import ceil
from typing import List, Tuple

from .. import Provider as BaseProvider


class Provider(BaseProvider):
    vat_id_formats: Tuple[str, ...] = (
        "CZ########",
        "CZ#########",
        "CZ##########",
    )

    national_id_months: List[str] = ["%.2d" % i for i in range(1, 13)] + ["%.2d" % i for i in range(51, 63)]

    def vat_id(self) -> str:
        """
        http://ec.europa.eu/taxation_customs/vies/faq.html#item_11
        :return: A random Czech VAT ID
        """
        return self.bothify(self.random_element(self.vat_id_formats))

    def birth_number(self) -> str:
        """
        Birth Number (Czech/Slovak: rodné číslo (RČ))
        https://en.wikipedia.org/wiki/National_identification_number#Czech_Republic_and_Slovakia
        """
        birthdate = self.generator.date_of_birth()
        year = f"{birthdate:%y}"
        month: str = self.random_element(self.national_id_months)
        day = f"{birthdate:%d}"
        if birthdate.year > 1953:
            sn = self.random_number(4, True)
        else:
            sn = self.random_number(3, True)
        number = int(f"{year}{month}{day}{sn}")
        birth_number = str(ceil(number / 11) * 11)
        if year == "00":
            birth_number = "00" + birth_number
        elif year[0] == "0":
            birth_number = "0" + birth_number
        return f"{birth_number[:6]}/{birth_number[6:]}"