
    b?1iF                         d Z ddlZddlmZ edefd       Zedefd       Zedefd       Zedefd	       Zedefd
       Z	edefd       Z
edefd       Zedefd       Zy)zCard.    N   )	validatorvaluec                    | sy	 t        t        t        |             }t        |ddd         }t        d |ddd   D              }||z   dz  dk(  S # t        $ r Y yw xY w)a  Return whether or not given value is a valid generic card number.

    This validator is based on [Luhn's algorithm][1].

    [1]: https://github.com/mmcloughlin/luhn

    Examples:
        >>> card_number('4242424242424242')
        # Output: True
        >>> card_number('4242424242424241')
        # Output: ValidationError(func=card_number, args={'value': '4242424242424241'})

    Args:
        value:
            Generic card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid generic card number.
        (ValidationError):
            If `value` is an invalid generic card number.

    > *New in version 0.15.0*.
    FNc              3   L   K   | ]  }t        t        d |z  d              yw)   
   N)sumdivmod).0ds     Y/home/www/therecruiter.miabetepe.com/venv/lib/python3.12/site-packages/validators/card.py	<genexpr>zcard_number.<locals>.<genexpr>)   s      F!s6!a%,-Fs   "$r   r   )listmapintr   
ValueError)r   digitsodd_sumeven_sums       r   card_numberr   
   st    4 c#uo&fRVVn%Fvbf"f~FF("b(A-- s   AA 	AAc                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )a  Return whether or not given value is a valid Visa card number.

    Examples:
        >>> visa('4242424242424242')
        # Output: True
        >>> visa('2223003122003222')
        # Output: ValidationError(func=visa, args={'value': '2223003122003222'})

    Args:
        value:
            Visa card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid Visa card number.
        (ValidationError):
            If `value` is an invalid Visa card number.

    > *New in version 0.15.0*.
    z^4   recompiler   lenmatchr   patterns     r   visar#   /   s9    , jjGuK#e*"2Kw}}U7KK    c                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )aE  Return whether or not given value is a valid Mastercard card number.

    Examples:
        >>> mastercard('5555555555554444')
        # Output: True
        >>> mastercard('4242424242424242')
        # Output: ValidationError(func=mastercard, args={'value': '4242424242424242'})

    Args:
        value:
            Mastercard card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid Mastercard card number.
        (ValidationError):
            If `value` is an invalid Mastercard card number.

    > *New in version 0.15.0*.
    z#^(51|52|53|54|55|22|23|24|25|26|27)r   r   r!   s     r   
mastercardr&   I   s:    , jj?@GuK#e*"2Kw}}U7KKr$   c                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )aJ  Return whether or not given value is a valid American Express card number.

    Examples:
        >>> amex('378282246310005')
        # Output: True
        >>> amex('4242424242424242')
        # Output: ValidationError(func=amex, args={'value': '4242424242424242'})

    Args:
        value:
            American Express card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid American Express card number.
        (ValidationError):
            If `value` is an invalid American Express card number.

    > *New in version 0.15.0*.
    z^(34|37)   r   r!   s     r   amexr)   c   s9    , jj%GuK#e*"2Kw}}U7KKr$   c                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )a7  Return whether or not given value is a valid UnionPay card number.

    Examples:
        >>> unionpay('6200000000000005')
        # Output: True
        >>> unionpay('4242424242424242')
        # Output: ValidationError(func=unionpay, args={'value': '4242424242424242'})

    Args:
        value:
            UnionPay card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid UnionPay card number.
        (ValidationError):
            If `value` is an invalid UnionPay card number.

    > *New in version 0.15.0*.
    z^62r   r   r!   s     r   unionpayr+   }   9    , jj GuK#e*"2Kw}}U7KKr$   c                    t        j                  d      }t        |       xr  t        |       dv xr |j	                  |       S )a=  Return whether or not given value is a valid Diners Club card number.

    Examples:
        >>> diners('3056930009020004')
        # Output: True
        >>> diners('4242424242424242')
        # Output: ValidationError(func=diners, args={'value': '4242424242424242'})

    Args:
        value:
            Diners Club card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid Diners Club card number.
        (ValidationError):
            If `value` is an invalid Diners Club card number.

    > *New in version 0.15.0*.
    z^(30|36|38|39)>      r   r   r!   s     r   dinersr/      s:    , jj*+GuQ#e*"8QW]]5=QQr$   c                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )a  Return whether or not given value is a valid JCB card number.

    Examples:
        >>> jcb('3566002020360505')
        # Output: True
        >>> jcb('4242424242424242')
        # Output: ValidationError(func=jcb, args={'value': '4242424242424242'})

    Args:
        value:
            JCB card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid JCB card number.
        (ValidationError):
            If `value` is an invalid JCB card number.

    > *New in version 0.15.0*.
    z^35r   r   r!   s     r   jcbr1      r,   r$   c                    t        j                  d      }t        |       xr! t        |       dk(  xr |j	                  |       S )a7  Return whether or not given value is a valid Discover card number.

    Examples:
        >>> discover('6011111111111117')
        # Output: True
        >>> discover('4242424242424242')
        # Output: ValidationError(func=discover, args={'value': '4242424242424242'})

    Args:
        value:
            Discover card number string to validate

    Returns:
        (Literal[True]):
            If `value` is a valid Discover card number.
        (ValidationError):
            If `value` is an invalid Discover card number.

    > *New in version 0.15.0*.
    z^(60|64|65)r   r   r!   s     r   discoverr3      s9    , jj(GuK#e*"2Kw}}U7KKr$   )__doc__r   utilsr   strr   r#   r&   r)   r+   r/   r1   r3    r$   r   <module>r8      s     
  !s ! !H L L L2 Lc L L2 L L L2 LC L L2 R# R R2 Ls L L2 LC L Lr$   