Комментарии 3
Хорошая и практичная заметка. Контрольные суммы это действительно простой и эффективный способ отсечь мусор до обращения в ЕГРЮЛ и снизить нагрузку на API. Важно, что это не проверка существования данных, а только фильтр корректности формата. Валидный номер всё равно может не принадлежать реальной компании. Отдельно ценно, что такая проверка улучшает UX, пользователь сразу получает понятную ошибку, а не не найдено.
Такая здоровенная статья…
Я когда-то давно делал валидатор номера СНИЛС просто по википедии, получилось это
function validateSNILS(number) {
number = number.toString().replace(/\D/g, '')
// Цифр всегда 11
if (number.length != 11)
return false
// Трёх одинаковых цифр подряд быть не может
if (/(\d)\1\1/.test(number.toString()))
return false
const controlCode = Number(number.substr(-2))
let hashCode = number.substr(0, 9)
.split('')
.map((N, idx) => Number(N) * (9 - idx))
.reduce((sum, N) => sum + N)
if (hashCode == 100)
hashCode = 0
return controlCode == hashCode % 101
}Не знаю, зачем вокруг этого стоит писать 5 абзацев текста и высасывать статью из пальца.
Году в 2000-м мой работодатель попросил меня сделать генератор номеров СНИЛС. У них была дикая текучка и на конец года образовывалось пара сотен лиц, принятых и уволившихся без номера. Я на всякий случай спросил, а не прилетит ли нам за это, на что директор махнул рукой. Ну я и написал. Самое трудное было с контрольной суммой. Интернетов тогда в нынешнем понимании не было и узнать принцип было неоткуда. Помогли , насколько помнится, конспекты лекций по прикладной теории информации из бауманского и алгоритм расчета я нашел. Через некоторое время главбух, потупив глаза, сказала, что со мной хотят поговорить в пенсионном. Там мне в лоб сказали, что после подгрузки нашей шараги в общую базу там всё рушится к чертям и нет ли у меня предположений почему. Я только пожал плечами - хз, откуда мне знать. В конторе я всё сказал, что я думаю насчет этой подставы. Директор на глаза не показывался и больше про это не вспоминали.

Контрольные суммы ИНН, ОГРН и СНИЛС: разбираем алгоритмы и пишем валидатор на Python