3

‘ã\Z
  ã               @   s<  dQ\Z ZZZZZdZdZdZd	Z	d
Z
dZedRdSfedTdUfedVdWfedXdYfedZeeeeeddƒƒƒƒeeeeedd ƒƒƒƒ d!d"g fed[eeeeed#d$ƒƒƒƒfe	eedd%ƒƒd\feeed*d%ƒƒd]fed^eeeeed4d5ƒƒƒƒfed_d`fe
eedd%ƒƒdafeeedd%ƒƒdbfe dcddfededffgZdJdK„ ZdLdM„ ZdNdO„ ZdPS )gÚVisaúVisa ElectronÚ
MastercardúAmerican ExpressÚMaestroÚDiscoverzDiners ClubzChina UnionPayÚJCBZLaserZSoloZSwitché   Ú34Ú37é   é   é   é   Ú62Ú88é   Ú300Ú301Ú302Ú303Ú304Ú305Ú36i.~	 iN	 i„  iŠ  Z6011Z65iÈ  i  é   Ú6304Ú6706Ú6771Ú6709é   Ú5018Ú5020Ú5038Ú5893Ú6759Ú6761Ú6762Ú6763Ú0604é3   é8   Ú54Ú55Ú6334Ú6767Ú4903Ú4905Ú4911Ú4936Ú564182Ú633110Ú6333é   Ú4Ú4026Ú417500Ú4405Ú4508Ú4844Ú4913Ú4917c             C   s   t | ƒtkS )N)Úbankcard_typeÚAMEX)Únumber© rA   ú7/var/www/html/oscar2019/oscar/apps/payment/bankcards.pyÚis_amex&   s    rC   c             C   s0   dd„ }x"t D ]\}}}|| ||ƒr|S qW dS )zy
    Return the type of a bankcard based on its card_number.

    Returns None is the card_number is not recognised.
    c             S   s0   t | ƒ|krdS x|D ]}| j|ƒrdS qW dS )NFT)ÚlenÚ
startswith)Úcard_numberÚlengthsÚprefixesÚprefixrA   rA   rB   Úmatches0   s    

zbankcard_type.<locals>.matchesN)Ú
CARD_TYPES)rF   rJ   Ú	card_typerG   rH   rA   rA   rB   r>   *   s    r>   c             C   st   t | ƒ} d}t| ƒ}|d@ }xJtd|ƒD ]<}t| | ƒ}|d@ |A sL|d }|dkr\|d }|| }q(W |d dkS )zC
    Test whether a bankcard number passes the Luhn algorithm.
    é    é   é   é	   é
   )ÚstrrD   ÚrangeÚint)rF   ÚsumZ
num_digitsZodd_evenÚiÚdigitrA   rA   rB   Úluhn<   s    rX   N)r   r   r   r   r   r   )r   )r	   r
   )r   r   r   r   )r   r   )r   )r   r   r   r   r   r   )r   )r   )r   )r   )r   r   r   r   )
r   r    r!   r"   r   r#   r$   r%   r&   r'   )r   )r   )r*   r+   )r,   r-   )r.   r/   r0   r1   r2   r3   r4   r#   )r5   r   )r6   )r   )r7   r8   r9   r:   r;   r<   r=   )ZVISAZVISA_ELECTRONZ
MASTERCARDr?   ZMAESTROZDISCOVERZDINERS_CLUBZCHINA_UNIONPAYr   ZLASERZSOLOZSWITCHÚlistÚmaprR   rS   rK   rC   r>   rX   rA   rA   rA   rB   Ú<module>   s8    8