Вопрос: Как проверить правильность формата мексиканского SSN?
Что такое НСС? Номер социального страхования (NSS) — это социальная идентичность работника. Он выдается IMSS и состоит из 11 цифр.
Контекст: я хочу подтвердить, что SSN может быть действительным. Меня не интересует, существует ли он на самом деле. В настоящее время я проверяю, что они 11 цифр:
/^\d{11}$/
но теперь мне интересно посмотреть, можно ли это более строго проверить.
формат SSN
Номер социального страхования состоит из:
Коды субделегирования IMSS перечислены в Руководстве по интеграции NSS ? . Хотя некоторые (немногие) числа недействительны, они могут появиться в будущем, поэтому мы не можем проверить это поле. Также в особых случаях, когда нет записи о дате рождения, используется код
97
.Когда у вас есть дата рождения, по логике вещей она должна быть меньше года увольнения работника.
Контрольная цифра присваивается с помощью алгоритма Луна , что позволит нам проверить SSN.
Обычная фраза
Будут проверены только 11 цифр, но мы будем использовать выражение для захвата первых 3 полей по отдельности:
Полная проверка
Я публикую код на JavaScript, чтобы иметь возможность выполнить его здесь, но его очень легко портировать на любой другой язык.
Описание
После проверки наличия 11 цифр и разделения первых 3 полей сравнивается год рождения с годом регистрации. Поскольку у нас есть только последние цифры года, к числу добавляется 100, если оно меньше текущего года (например, '05 будет больше, чем '99).
Однако основная проверка выполняется с помощью алгоритма Луна, который состоит из взятия цифр в нечетных позициях и цифр в четных позициях, умноженных на 2. Все цифры складываются (если какие-либо из них были больше или равны 10, возьмите сумма каждой цифры).
SSN действителен, если последняя цифра этой суммы равна
0
.