# stdnum.be.ssn

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'

stdnum.be.ssn.compact(number: str) → str

  Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.

stdnum.be.ssn.format(number: str) → str

  Reformat the number to the standard presentation format.

stdnum.be.ssn.get_birth_date(number: str) → date | None

  Return the date of birth.

stdnum.be.ssn.get_birth_month(number: str) → int | None

  Return the month of the birth date.

stdnum.be.ssn.get_birth_year(number: str) → int | None

  Return the year of the birth date.

stdnum.be.ssn.get_gender(number: str) → str | None

  Get the person’s gender (‘M’ or ‘F’).

stdnum.be.ssn.guess_type(number: str) → str | None

  Return the Belgian SSN type for which this number is valid.

stdnum.be.ssn.is_valid(number: str) → bool

  Check if the number is a valid Belgian SSN number.

stdnum.be.ssn.validate(number: str) → str

  Check if the number is a valid Belgian SSN. This searches for the proper sub-type and validates using that.