Я как раз недавно писал программу проверки СНИЛС (Страховой номер индивидуального лицевого счёта, открываемого в ПФР).
В СНИЛС должно быть 11 значащих цифр (пробелы и дефисы - не в счет)
СНИСЛ имеет вид:
XXX-XXX-XXX YY, где YY — контрольное число.
Чтобы определить контрольное число, нужно каждую цифру номера СНИЛС умножить на коэффициент 10 - i, где i - номер позиции. То есть, первая цифра умножается на 9, 2-я на 8, ..., 9-я - на 1.
Полученные произведения складываются.
Если полученная сумма меньше 100, то это и есть контрольное число.
Если сумма равна 100 или 101, то контрольное число - '00'
Если сумма больше 101, то сумма делится на 101 (нацело), и по остатку от деления определяется контрольное число приведенным выше способом (если меньше 100, то это контрольное число, если больше 101, то опять делится на 101).
Следует иметь в виду, что этот алгоритм действителен только для номеров больше номера 001—001-998.
Возможно, этот алгоритм поможет вам разобраться. Не исключено, что на сайте госУслуг при проверке СНИЛС программистами допущена ошибка. Попробуйте ввести СНИЛС без пробелов и дефисов.