o
    7Di                     @   st   d Z ddlmZ ddlZddlmZ edd Zedefdd	Zed
efddZ	eddd
ede
fddZdS )zFinland.    )	lru_cacheN)	validatorc                   C   s
   t dS )zBusiness ID Pattern.z^[0-9]{7}-[0-9]$)recompile r   r   K/var/www/Datamplify/venv/lib/python3.10/site-packages/validators/i18n/fi.py_business_id_pattern   s   
r   ssn_check_marksc                 C   s   t dj| dt jS )zSSN Pattern.z^
        (?P<date>(0[1-9]|[1-2]\d|3[01])
        (0[1-9]|1[012])
        (\d{{2}}))
        [ABCDEFYXWVU+-]
        (?P<serial>(\d{{3}}))
        (?P<checksum>[{check_marks}])$)check_marks)r   r   formatVERBOSE)r	   r   r   r   _ssn_pattern   s   r   valuec                C   s   | sdS t t | sdS g d}tt| dd }t| d }tdd t||D d }d| |kp?||  ko=d	kS   S )
a  Validate a Finnish Business ID.

    Each company in Finland has a distinct business id. For more
    information see [Finnish Trade Register][1]

    [1]: http://en.wikipedia.org/wiki/Finnish_Trade_Register

    Examples:
        >>> fi_business_id('0112038-9')  # Fast Monkeys Ltd
        True
        >>> fi_business_id('1234567-8')  # Bogus ID
        ValidationError(func=fi_business_id, args={'value': '1234567-8'})

    Args:
        value:
            Business ID string to be validated.

    Returns:
        (Literal[True]): If `value` is a valid finnish business id.
        (ValidationError): If `value` is an invalid finnish business id.
    F)   	   
               Nr   r   c                 s   s    | ]	\}}|| V  qd S )Nr   ).0fnr   r   r   	<genexpr>>   s    z!fi_business_id.<locals>.<genexpr>   r   )r   matchr   mapintsumzip)r   factorsnumberschecksummodulor   r   r   fi_business_id    s   $r$   T)allow_temporal_ssnr%   c               C   s|   | sdS d}t t||  }sdS | }t|d |d  }t|d dko=|p1t|d dko=||t|  |d kS )a  Validate a Finnish Social Security Number.

    This validator is based on [django-localflavor-fi][1].

    [1]: https://github.com/django/django-localflavor-fi/

    Examples:
        >>> fi_ssn('010101-0101')
        True
        >>> fi_ssn('101010-0102')
        ValidationError(func=fi_ssn, args={'value': '101010-0102'})

    Args:
        value:
            Social Security Number to be validated.
        allow_temporal_ssn:
            Whether to accept temporal SSN numbers. Temporal SSN numbers are the
            ones where the serial is in the range [900-999]. By default temporal
            SSN numbers are valid.

    Returns:
        (Literal[True]): If `value` is a valid finnish SSN.
        (ValidationError): If `value` is an invalid finnish SSN.
    F0123456789ABCDEFHJKLMNPRSTUVWXYdateserialr   i  r"   )r   r   r   	groupdictr   len)r   r%   r	   resultgdr"   r   r   r   fi_ssnB   s   r-   )__doc__	functoolsr   r   validators.utilsr   r   strr   r$   boolr-   r   r   r   r   <module>   s    
!