Ë
    Ã?Æi  ã                  óN   — d Z ddlmZ ddl­ ddlmZmZ d
d„Zd
d„Zd
d„Z	dd„Z
y	)u¬  ÐžÐ“Ð Ð�, OGRN, PSRN, ÐžÐ“Ð Ð�Ð˜ÐŸ, OGRNIP (Russian Primary State Registration Number).

The ÐžÐ“Ð Ð� (ÐžÑ�Ð½Ð¾Ð²Ð½Ð¾Ð¹ Ð³Ð¾Ñ�ÑƒÐ´Ð°Ñ€Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€, Primary State
Registration Number) is a Russian identifier for legal entities. The number
consists of 13 or 15 digits and includes information on the type of
organisation, the registration year and a tax inspection code. The 15 digit
variant is called ÐžÐ“Ð Ð�Ð˜ÐŸ (ÐžÑ�Ð½Ð¾Ð²Ð½Ð¾Ð¹ Ð³Ð¾Ñ�ÑƒÐ´Ð°Ñ€Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€
Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»Ñ�, Primary State Registration Number of an
Individual Entrepreneur).

More information:

* https://ru.wikipedia.org/wiki/ÐžÑ�Ð½Ð¾Ð²Ð½Ð¾Ð¹_Ð³Ð¾Ñ�ÑƒÐ´Ð°Ñ€Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹_Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹_Ð½Ð¾Ð¼ÐµÑ€
* https://ru.wikipedia.org/wiki/ÐžÑ�Ð½Ð¾Ð²Ð½Ð¾Ð¹_Ð³Ð¾Ñ�ÑƒÐ´Ð°Ñ€Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹_Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹_Ð½Ð¾Ð¼ÐµÑ€_Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾_Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»Ñ�

>>> validate('1022200525819')
'1022200525819'
>>> validate('385768585948949')
'385768585948949'
>>> validate('1022500001328')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
é    )Úannotations)Ú*)ÚcleanÚisdigitsc                ó   — t        | d«      S )zˆConvert the number to the minimal representation. This strips the
    number of any valid separators and removes surrounding whitespace.ú )r   ©Únumbers    úU/var/www/html/myprovider/mon_projet_qr/lib/python3.12/site-packages/stdnum/ru/ogrn.pyÚcompactr   5   s   € ô �˜ÓÐó    c                óŒ   — t        | «      dk(  rt        t        | dd «      dz  dz  «      S t        t        | dd «      dz  «      S )z<Calculate the control digit of the OGRN based on its length.é   Néÿÿÿÿé   é
   )ÚlenÚstrÚintr	   s    r   Úcalc_check_digitr   ;   sI   € ä
ˆ6ƒ{�bÒÜ”3�v˜c˜r�{Ó# bÑ(¨2Ñ-Ó.Ð.ä”3�v˜c˜r�{Ó# bÑ(Ó)Ð)r   c                ó  — t        | «      } t        | «      s
t        «       ‚t        | «      dk(  r| d   dk(  r3t	        «       ‚t        | «      dk(  r| d   dvrt	        «       ‚t        «       ‚| d   t        | «      k7  r
t        «       ‚| S )z.Determine if the given number is a valid OGRN.r   r   Ú0é   Ú34r   )r   r   ÚInvalidFormatr   ÚInvalidComponentÚInvalidLengthr   ÚInvalidChecksumr	   s    r   Úvalidater   C   s…   € ä�V‹_€FÜ�FÔÜ‹oÐÜ
ˆ6ƒ{�bÒØ�!‰9˜ÒÜ"Ó$Ð$Ü	ˆV‹˜Ò	Ø�!‰9˜DÑ Ü"Ó$Ð$ä‹oÐØˆb�zÔ% fÓ-Ò-ÜÓÐØ€Mr   c                óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w)z$Check if the number is a valid OGRN.F)Úboolr   ÚValidationErrorr	   s    r   Úis_validr#   U   s)   € ðÜ”H˜VÓ$Ó%Ð%øÜò Ùðús   ‚ –	"¡"N)r
   r   Úreturnr   )r
   r   r$   r!   )Ú__doc__Ú
__future__r   Ústdnum.exceptionsÚstdnum.utilr   r   r   r   r   r#   © r   r   ú<module>r*      s)   ðñ,õ2 #ä ß 'óó*óô$r   