Ë
    Ã?Æiÿ  ã                  ór   — d Z ddlmZ ddl­ ddlmZmZ dZdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zy)aH  AIC (Italian code for identification of drugs).

AIC codes are used to identify drugs allowed to be sold in Italy. Codes are
issued by the Italian Drugs Agency (AIFA, Agenzia Italiana del Farmaco), the
government authority responsible for drugs regulation in Italy.

The number consists of 9 digits and includes a check digit.

More information:

* https://www.gazzettaufficiale.it/do/atto/serie_generale/caricaPdf?cdimg=14A0566800100010110001&dgu=2014-07-18&art.dataPubblicazioneGazzetta=2014-07-18&art.codiceRedazionale=14A05668&art.num=1&art.tiposerie=SG

>>> validate('000307052')  # BASE10 format
'000307052'
>>> validate('009CVD')  # BASE32 format is converted
'000307052'
>>> validate_base10('000307052')
'000307052'
>>> validate_base32('009CVD')
'000307052'
>>> to_base32('000307052')
'009CVD'
>>> from_base32('009CVD')
'000307052'
é    )Úannotations)Ú*)ÚcleanÚisdigitsÚ 0123456789BCDFGHJKLMNPQRSTUVWXYZc                óR   — t        | d«      j                  «       j                  «       S )z1Convert the number to the minimal representation.ú )r   ÚupperÚstrip©Únumbers    úT/var/www/html/myprovider/mon_projet_qr/lib/python3.12/site-packages/stdnum/it/aic.pyÚcompactr   <   s!   € ä�˜Ó×#Ñ#Ó%×+Ñ+Ó-Ð-ó    c                óÌ   — t        | «      } t        d„ | D «       «      s
t        «       ‚t        d„ t	        t        | «      «      D «       «      }t        |«      j                  d«      S )z:Convert a BASE32 representation of an AIC to a BASE10 one.c              3  ó,   K  — | ]  }|t         v –— Œ y ­w©N)Ú_base32_alphabet©Ú.0Úxs     r   ú	<genexpr>zfrom_base32.<locals>.<genexpr>D   s   è ø€ Ò5¨ˆqÔ$Ô$Ñ5ùs   ‚c              3  óX   K  — | ]"  \  }}t         j                  |«      d |z  z  –— Œ$ y­w)é    N)r   Úindex)r   ÚiÚns      r   r   zfrom_base32.<locals>.<genexpr>F   s0   è ø€ ò 5Ù��1ô ×"Ñ" 1Ó%¨¨a©Õ/ñ 5ùs   ‚(*é	   )r   ÚallÚInvalidFormatÚsumÚ	enumerateÚreversedÚstrÚzfill)r   Úss     r   Úfrom_base32r'   A   sT   € ä�V‹_€FÜÑ5¨fÔ5Ô5Ü‹oÐÜñ 5Ü!¤(¨6Ó"2Ó3ô5ó 	5€Aäˆq‹6�<‰<˜‹?Ðr   c                óÔ   — t        | «      } t        | «      s
t        «       ‚d}t        | «      }|dkD  rt        |dz     |z   }|dz  }|dkD  rŒt        |   |z   }|j                  d«      S )z:Convert a BASE10 representation of an AIC to a BASE32 one.Ú é   r   é   )r   r   r    Úintr   r%   )r   ÚresÚ	remainders      r   Ú	to_base32r/   K   st   € ä�V‹_€FÜ�FÔÜ‹oÐØ
€CÜ�F“€IØ
�bŠ.Ü˜y¨2™~Ñ.°Ñ4ˆØ ‘Oˆ	ð �b‹.ô ˜9Ñ
%¨Ñ
+€CØ�9‰9�Q‹<Ðr   c           
     óz   — t        | «      } d}t        t        d„ d„ t        || «      D «       D «       «      dz  «      S )z2Calculate the check digit for the BASE10 AIC code.)é   é   r1   r2   r1   r2   r1   r2   c              3  ó2   K  — | ]  }|d z  |d z  z   –— Œ y­w)é
   N© r   s     r   r   z#calc_check_digit.<locals>.<genexpr>]   s'   è ø€ ò GØð ˜‘G  B¡Õ'ñ Gùs   ‚c              3  ó>   K  — | ]  \  }}|t        |«      z  –— Œ y ­wr   )r,   )r   Úwr   s      r   r   z#calc_check_digit.<locals>.<genexpr>^   s   è ø€ ÒE©¨¨1˜œS ›V�ÑEùs   ‚r4   )r   r$   r!   Úzip)r   Úweightss     r   Úcalc_check_digitr:   Y   sK   € ä�V‹_€FØ&€GÜŒsñ GÙE´°G¸VÓ0DÔEôGó GØIKñLó Mð Mr   c                óÐ   — t        | «      } t        | «      dk7  r
t        «       ‚t        | «      s
t	        «       ‚| d   dk7  r
t        «       ‚t        | «      | d   k7  r
t        «       ‚| S )z=Check if a string is a valid BASE10 representation of an AIC.r   r   Ú0éÿÿÿÿ)r   ÚlenÚInvalidLengthr   r    ÚInvalidComponentr:   ÚInvalidChecksumr   s    r   Úvalidate_base10rB   a   sc   € ä�V‹_€FÜ
ˆ6ƒ{�aÒÜ‹oÐÜ�FÔÜ‹oÐØˆa�y�CÒÜÓ Ð Ü˜Ó 6¨"¡:Ò-ÜÓÐØ€Mr   c                óp   — t        | «      } t        | «      dk7  r
t        «       ‚t        t	        | «      «      S )z=Check if a string is a valid BASE32 representation of an AIC.r+   )r   r>   r?   rB   r'   r   s    r   Úvalidate_base32rD   o   s/   € ä�V‹_€FÜ
ˆ6ƒ{�aÒÜ‹oÐÜœ; vÓ.Ó/Ð/r   c                ó`   — t        | «      } t        | «      dk(  rt        | «      S t        | «      S )zpCheck if a string is a valid AIC. BASE10 is the canonical form and
    is 9 chars long, while BASE32 is 6 chars.r+   )r   r>   rD   rB   r   s    r   ÚvalidaterF   w   s/   € ô �V‹_€FÜ
ˆ6ƒ{�aÒÜ˜vÓ&Ð&ä˜vÓ&Ð&r   c                óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w)z.Check if the given string is a valid AIC code.F)ÚboolrF   ÚValidationErrorr   s    r   Úis_validrJ   �   s)   € ðÜ”H˜VÓ$Ó%Ð%øÜò Ùðús   ‚ –	"¡"N)r   r$   Úreturnr$   )r   r$   rK   rH   )Ú__doc__Ú
__future__r   Ústdnum.exceptionsÚstdnum.utilr   r   r   r   r'   r/   r:   rB   rD   rF   rJ   r5   r   r   ú<module>rP      sF   ðñ0õ4 #ä ß 'ð 6Ð ó.ó
óóMóó0ó'ôr   