Сейчас всё чаще и чаще для доступа к сайтам как-либо связанным с государством требуется вспоминать свой номер страхового свидетельства, он же СНИЛС. Номер этот можно проверить на корректность, также как и ИНН и ОГРН.>
Формула проверки очень простая: берём первые девять цифр высчитываем сумму всех произведений каждой цифры на номер с конца. Т.е. первую цифру умножаем на 9, вторую на 8 и т.д. Полученную сумму сравниваем с последними двумя цифрами – если совпало – всё правильно. Единственный нюанс это если получилась сумма больше ста, но там надо либо сравнивать с нулём, либо с остатком от деления на 101.
Все эти манипуляции можно записать в одну функцию:
function checkSnils(checkedValue,fieldName){
var checkSum = parseInt(checkedValue.slice(9),10);
//строка как массив(для старых браузеров)
checkedValue = "" + checkedValue;
checkedValue = checkedValue.split('');
var sum = (checkedValue[0]*9 + checkedValue[1]*8 + checkedValue[2]*7 + checkedValue[3]*6 + checkedValue[4]*5 + checkedValue[5]*4 + checkedValue[6]*3 + checkedValue[7]*2 + checkedValue[8]*1);
if(sum < 100 && sum == checkSum){
return true;
}else if((sum == 100 || sum == 101) && checkSum == 0){
return true;
}else if(sum > 101 && (sum%101 == checkSum || (sum%101 == 100 && checkSum == 0))){
return true;
}else{
return false;
}
}
Вот и вся проверка =) Переделать этот же код для php вообще тривиальная задача, если кому понадобится и он не догадается как это делать — могу выложить.
Какой снилс не прошел проверку? Данный скрипт работает на боевом проекте и нареканий не вызывает.
Ответить