Валидация и проверка контрольного числа СНИЛС

На JavaScript
На PHP

Описание

СНИЛС (страховой номер индивидуального лицевого счета) состоит из 11 цифр:

  • 1-9-я цифры — любые цифры;
  • 10-11-я цифры — контрольное число.

Маски ввода

  • XXXXXXXXXXX — маска ввода без разделителей.
  • XXX-XXX-XXX-XX — маска ввода с разделителями.
  • XXX-XXX-XXX XX — маска ввода с разделителями и с отделением контрольного числа.

Алгоритм проверки контрольного числа

  1. Вычислить сумму произведений цифр СНИЛС (с 1-й по 9-ю) на следующие коэффициенты — 9, 8, 7, 6, 5, 4, 3, 2, 1 (т.е. номера цифр в обратном порядке).
  2. Вычислить контрольное число от полученной суммы следующим образом:
    1. если она меньше 100, то контрольное число равно этой сумме;
    2. если равна 100, то контрольное число равно 0;
    3. если больше 100, то вычислить остаток от деления на 101 и далее:
      1. если остаток от деления равен 100, то контольное число равно 0;
      2. в противном случае контрольное число равно вычисленному остатку от деления.
  3. Сравнить полученное контрольное число с двумя младшими разрядами СНИЛС. Если они равны, то СНИЛС верный.

Реализация на JavaScript

Исходный код доступен на GitHub по этой ссылке (функция validateSnils).

Реализация на PHP

Исходный код доступен на GitHub по этой ссылке (метод validateSnils).