Ë
    Ã?ÆiN  ã                  ó†   — d Z ddlmZ ddlZddlmZmZ ddl­ eef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dd„Zy)uH  SSN, INSZ, NISS (Belgian social security number).

The Belgian social security identification number, also known as the INSZ
number (Identificatienummer van de sociale zekerheid), NISS number (NumÃ©ro
d'identification de la sÃ©curitÃ© sociale) or ENSS number (Erkennungsnummer
der sozialen Sicherheit), is the unique identification number of a person
working in or covered for social benefits in Belgium.

For Belgian residents, the number is identical to their Belgian National
Number (Rijksregisternummer, NumÃ©ro National).
For non-residents, the number is identical to their Belgian BIS number.

Both numbers consists of 11 digits and encode a person's date of birth and
gender. It encodes the date of birth in the first 6 digits in the format
YYMMDD. The following 3 digits represent a counter of people born on the same
date, separated by sex (odd for male and even for females respectively). The
final 2 digits form a check number based on the 9 preceding digits.


More information:

* https://www.socialsecurity.be/site_nl/employer/applics/belgianidpro/index.htm
* https://overheid.vlaanderen.be/personeel/regelgeving/insz-nummer
* https://www.ksz-bcss.fgov.be/nl/project/rijksregisterksz-registers

>>> compact('85.07.30-033 28')
'85073003328'
>>> compact('98.47.28-997.65')
'98472899765'
>>> validate('85 07 30 033 28')
'85073003328'
>>> validate('98 47 28 997 65')
'98472899765'
>>> validate('17 07 30 033 84')
'17073003384'
>>> validate('01 49 07 001 85')
'01490700185'
>>> validate('12345678901')
Traceback (most recent call last):
    ...
InvalidChecksum: ...

>>> guess_type('85.07.30-033 28')
'nn'
>>> guess_type('98.47.28-997.65')
'bis'

>>> format('85073003328')
'85.07.30-033.28'
>>> get_birth_date('85.07.30-033 28')
datetime.date(1985, 7, 30)
>>> get_birth_year('85.07.30-033 28')
1985
>>> get_birth_month('85.07.30-033 28')
7
>>> get_gender('85.07.30-033 28')
'M'

>>> format('98472899765')
'98.47.28-997.65'
>>> get_birth_date('98.47.28-997.65')
datetime.date(1998, 7, 28)
>>> get_birth_year('98.47.28-997.65')
1998
>>> get_birth_month('98.47.28-997.65')
7
>>> get_gender('98.47.28-997.65')
'M'

é    )ÚannotationsN)ÚbisÚnn)Ú*c                ó,   — t        j                  | «      S )zˆConvert the number to the minimal representation. This strips the
    number of any valid separators and removes surrounding whitespace.)r   Úcompact©Únumbers    úT/var/www/html/myprovider/mon_projet_qr/lib/python3.12/site-packages/stdnum/be/ssn.pyr   r   g   s   € ô �:‰:�fÓÐó    c                óv   — 	 t        j                  | «      S # t        $ r t        j                  | «      cY S w xY w)zoCheck if the number is a valid Belgian SSN. This searches for
    the proper sub-type and validates using that.)r   ÚvalidateÚInvalidComponentr   r	   s    r   r   r   m   s6   € ð#Ü�|‰|˜FÓ#Ð#øÜò #ô �{‰{˜6Ó"Ò"ð#ús   ‚ —8·8c                óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w)z2Check if the number is a valid Belgian SSN number.F)Úboolr   ÚValidationErrorr	   s    r   Úis_validr   x   s)   € ðÜ”H˜VÓ$Ó%Ð%øÜò Ùðús   ‚ –	"¡"c                ó~   — t         D ]4  }|j                  | «      sŒ|j                  j                  dd«      d   c S  y)z;Return the Belgian SSN type for which this number is valid.ú.é   éÿÿÿÿN)Ú_ssn_modulesr   Ú__name__Úrsplit©r
   Úmods     r   Ú
guess_typer   €   s>   € äò 3ˆØ�<‰<˜ÕØ—<‘<×&Ñ& s¨AÓ.¨rÑ2Ò2ð3ð r   c                ó,   — t        j                  | «      S )z8Reformat the number to the standard presentation format.)r   Úformatr	   s    r   r   r   ˆ   s   € ä�9‰9�VÓÐr   c                ó,   — t        j                  | «      S )z"Return the year of the birth date.)r   Úget_birth_yearr	   s    r   r!   r!   �   ó   € ä×Ñ˜VÓ$Ð$r   c                ó,   — t        j                  | «      S )z#Return the month of the birth date.)r   Úget_birth_monthr	   s    r   r$   r$   ’   s   € ä×Ñ˜fÓ%Ð%r   c                ó,   — t        j                  | «      S )zReturn the date of birth.)r   Úget_birth_dater	   s    r   r&   r&   —   r"   r   c                ób   — t         D ]&  }|j                  | «      sŒ|j                  | «      c S  y)z%Get the person's gender ('M' or 'F').N)r   r   Ú
get_genderr   s     r   r(   r(   œ   s1   € äò *ˆØ�<‰<˜ÕØ—>‘> &Ó)Ò)ð*ð r   )r
   ÚstrÚreturnr)   )r
   r)   r*   r   )r
   r)   r*   z
str | None)r
   r)   r*   z
int | None)r
   r)   r*   zdatetime.date | None)Ú__doc__Ú
__future__r   ÚdatetimeÚ	stdnum.ber   r   Ústdnum.exceptionsr   r   r   r   r   r   r!   r$   r&   r(   © r   r   ú<module>r1      sR   ðñ*EõN #ã ç Ü ð �Cˆy€óó#óóóó
%ó
&ó
%ô
r   