
    j                         d Z ddlmZ ddlZddlmZ ed             Zedefd            Zedefd	            Z	ed
ddede
fd            ZdS )zFinland.    )	lru_cacheN)	validatorc                  *    t          j        d          S )zBusiness ID Pattern.z^[0-9]{7}-[0-9]$)recompile     U/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/validators/i18n/fi.py_business_id_patternr      s     :)***r	   ssn_check_marksc                 h    t          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   s    r
   _ssn_patternr      s3     :	* +1&_&*M*M

	 	 	r	   valuec                B   | sdS t          j        t                      |           sdS g d}t          t          | dd                   }t	          | d                   }t          d t          ||          D                       dz  }d|z
  |k    p||cxk    odk    nc 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              3   &   K   | ]\  }}||z  V  d S )Nr   ).0fns      r
   	<genexpr>z!fi_business_id.<locals>.<genexpr>>   s*      9941aQ999999r	      r   )r   matchr   mapintsumzip)r   factorsnumberschecksummodulos        r
   fi_business_idr*       s    .  u8(**E22 u$$$G#uRaRy!!G58}}H993w#8#899999B>FK8#A8)@)@)@)@q)@)@)@)@Ar	   T)allow_temporal_ssnr+   c               j   | sdS d}t          j        t          |          |           x}sdS |                                }t	          |d         |d         z             }t	          |d                   dk    o<|pt	          |d                   dk    o!||t          |          z           |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(   s         r
   fi_ssnr4   B   s    4  u7Oh|O<<eDDDF u					B2f:8,--HBxLQ 	O;3r(|#4#4#;	OHs?';';;<:Nr	   )__doc__	functoolsr   r   validators.utilsr   r   strr   r*   boolr4   r   r	   r
   <module>r:      s            				 ' & & & & & + + +
 #     B# B B B BB 8< $ $ $# $ $ $ $ $ $ $r	   