o
    ãË·e˜  ã                   @   sL   d dl mZ dZdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZdS )é    )Ú	validator)Úes_cifÚes_nifÚes_nieÚes_doic                 C   sl   |   ¡ } | |v r
dS d}t| ƒdkrdS | d }| | d | d ¡| dd…  }| ¡ o5||t|ƒd  kS )zu
    Validate if the doi is a NIF or a NIE.
    :param doi: DOI to validate.
    :return: boolean if it's valid.
    FÚTRWAGMYFPDXBNJZSQVHLCKEé	   é   r   é   é   )ÚupperÚlenÚgetÚisdigitÚint)ÚdoiÚnumber_by_letterÚspecial_casesÚtableÚcontrolÚnumbers© r   úI/var/www/ideatree/venv/lib/python3.10/site-packages/validators/i18n/es.pyÚnif_nie_validation   s    r   c           
      C   sö   |   ¡ } t| ƒdkrdS d}| d }| dd… }| d }| ¡ s"dS d}d}t|ƒD ] \}}|d dkrD|ttttt|ƒd ƒƒƒ7 }q*|t|ƒ7 }q*d|| d  d }	|d	v r_t|	ƒ|kS |d
v ri||	 |kS |dvrodS |t|	ƒkpz|||	 kS )a}  
    Validate a Spanish CIF.

    Each company in Spain prior to 2008 had a distinct CIF and has been
    discontinued. For more information see `wikipedia.org/cif`_.

    The new replacement is to use NIF for absolutely everything. The issue is
    that there are "types" of NIFs now: company, person[citizen vs recident]
    all distinguished by the first character of the DOI. For this reason we
    will continue to call CIF NIFs that are used for companies.

    This validator is based on `generadordni.es`_.

    .. _generadordni.es:
        https://generadordni.es/

    .. _wikipedia.org/cif:
        https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal

    Examples::

        >>> es_cif('B25162520')
        True

        >>> es_cif('B25162529')
        ValidationFailure(func=es_cif, args=...)

    .. versionadded:: 0.13.0

    :param doi: DOI to validate
    r   FÚ
JABCDEFGHIr   r
   r	   é   é
   ÚABEHÚPSQWÚ	CDFGJNRUV)r   r   r   Ú	enumerateÚsumÚmapr   Ústr)
r   r   Ú	first_chrÚdoi_bodyr   Ú
odd_resultÚeven_resultÚindexÚcharÚresr   r   r   r      s.   ! r   c                 C   s    ddddœ}g d¢}t | ||ƒS )a–  
    Validate a Spanish NIF.

    Each entity, be it person or company in Spain has a distinct NIF. Since
    we've designated CIF to be a company NIF, this NIF is only for person.
    For more information see `wikipedia.org/nif`_.

    This validator is based on `generadordni.es`_.

    .. _generadordni.es:
        https://generadordni.es/

    .. _wikipedia.org/nif:
        https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal

    Examples::

        >>> es_nif('26643189N')
        True

        >>> es_nif('26643189X')
        ValidationFailure(func=es_nif, args=...)

    .. versionadded:: 0.13.0

    :param doi: DOI to validate
    Ú0)ÚLÚMÚK)Ú	X0000000TÚ	00000000TÚ	00000001R)r   ©r   r   r   r   r   r   r   c   s   r   c                 C   s6   ddddœ}dg}| r| d |  ¡ vrdS t| ||ƒS )u‹  
    Validate a Spanish NIE.

    The NIE is a tax identification number in Spain, known in Spanish as the
    NIE, or more formally the NÃºmero de identidad de extranjero. For more
    information see `wikipedia.org/nie`_.

    This validator is based on `generadordni.es`_.

    .. _generadordni.es:
        https://generadordni.es/

    .. _wikipedia.org/nie:
        https://es.wikipedia.org/wiki/N%C3%BAmero_de_identidad_de_extranjero

    Examples::

        >>> es_nie('X0095892M')
        True

        >>> es_nie('X0095892X')
        ValidationFailure(func=es_nie, args=...)

    .. versionadded:: 0.13.0

    :param doi: DOI to validate
    r+   Ú1Ú2)ÚXÚYÚZr/   r   F)Úkeysr   r2   r   r   r   r   …   s
   r   c                 C   s   t | ƒpt| ƒpt| ƒS )a6  
    Validate a Spanish DOI.

    A DOI in spain is all NIF / CIF / NIE / DNI -- a digital ID. For more
    information see `wikipedia.org/doi`_.

    This validator is based on `generadordni.es`_.

    .. _generadordni.es:
        https://generadordni.es/

    .. _wikipedia.org/doi:
        https://es.wikipedia.org/wiki/Identificador_de_objeto_digital

    Examples::

        >>> es_doi('X0095892M')
        True

        >>> es_doi('X0095892X')
        ValidationFailure(func=es_doi, args=...)

    .. versionadded:: 0.13.0

    :param doi: DOI to validate
    )r   r   r   )r   r   r   r   r   ¬   s   r   N)Úvalidators.utilsr   Ú__all__r   r   r   r   r   r   r   r   r   Ú<module>   s   
C
!
&