
    `                     t    d dl mZ dZd Zed             Zed             Zed             Zed             ZdS )	    )	validator)es_cifes_nifes_niees_doic                 .   |                                  } | |v rdS d}t          |           dk    rdS | d         }|                    | d         | d                   | dd         z   }|                                o||t	          |          dz           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numberss         2lib/python3.11/site-packages/validators/i18n/es.pynif_nie_validationr      s     ))++C
mu%E
3xx1}}u!fG ""3q63q622S1X=G??DE#g,,2C,D!DD    c                 Z   |                                  } t          |           dk    rdS d}| d         }| dd         }| d         }|                                sdS d}d}t          |          D ]c\  }}|dz  dk    rC|t	          t          t          t          t          |          dz                                z  }Q|t          |          z  }dd||z   dz  z
  dz  }	|d	v rt          |	          |k    S |d
v r||	         |k    S |dvrdS |t          |	          k    p|||	         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ress
             r   r   r      sW   B ))++C
3xx1}}uEAI1Q3xH!fG uJK ** % %t19>> #c#s3t99q='9'9::;;;JJ3t99$KKz)R//2
5CF3xx7""	f		SzW$$	+	%	%uc#hh7'U3Z"77r   c                 8    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   s      r   r   r   c   s2    : !s55;;;Mc#3]CCCr   c                 v    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Zr3   r   F)keysr   r6   s      r   r   r      sX    : !s55 MM  #a& 0 5 5 7 777uc#3]CCCr   c                 \    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   s    r   r   r      s&    8 #;;4&++44r   N)validators.utilsr   __all__r   r   r   r   r    r   r   <module>rB      s    & & & & & &
3E E E0 @8 @8 @8F D D DB #D #D #DL 5 5 5 5 5r   