Проверка СНИЛС: различия между версиями
Перейти к навигации
Перейти к поиску
Misha (обсуждение | вклад) |
Misha (обсуждение | вклад) (→Функция проверки СНИЛС) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 22: | Строка 22: | ||
*/ | */ | ||
− | $snils | + | preg_match( "/(\d{3})-(\d{3})-(\d{3})\s{1}(\d{2})/", $snils, $matches); |
− | if | + | if($matches == false) return false; |
− | $kontr= | + | $kontr = $matches[4]; |
− | $ | + | $num = $matches[1].$matches[2].$matches[3]; |
$k=9; | $k=9; | ||
− | for($i=0;$i< | + | for($i=0;$i<9;$i++) |
{ | { | ||
− | + | $sum += $k * $num{$i}; | |
− | $sum += $k * $ | ||
$k--; | $k--; | ||
} | } | ||
Строка 45: | Строка 44: | ||
else | else | ||
{ | { | ||
− | + | $ost=$sum % 101; | |
− | else return false; | + | if($ost == $kontr) return true; |
+ | elseif($ost == 100 && $kontr == '00') return true; | ||
+ | else return false; | ||
} | } | ||
} | } | ||
</pre> | </pre> |
Текущая версия на 10:26, 25 ноября 2016
Функция проверки СНИЛС
Описание функции взято тут
function test_snils($snils) { /* СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX-XXX-XXX — собственно номер, а YY — контрольное число. Алгоритм формирования контрольного числа СНИЛС таков: 1) Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998 2) Контрольное число СНИЛС рассчитывается следующим образом: 2.1) Каждая цифра СНИЛС умножается на номер своей позиции (позиции отсчитываются с конца) 2.2) Полученные произведения суммируются 2.3) Если сумма меньше 100, то контрольное число равно самой сумме 2.4) Если сумма равна 100 или 101, то контрольное число равно 00 2.5) Если сумма больше 101, то сумма делится по остатку на 101 и контрольное число определяется остатком от деления аналогично пунктам 2.3 и ПРИМЕР: Указан СНИЛС 112-233-445 95 Проверяем правильность контрольного числа: цифры номера 1 1 2 2 3 3 4 4 5 номер позиции 9 8 7 6 5 4 3 2 1 Сумма = 1×9 + 1×8 + 2×7 + 2×6 + 3×5 + 3×4 + 4×3 + 4×2 + 5×1 = 95 95 ÷ 101 = 0, остаток 95. Контрольное число 95 — указано верно */ preg_match( "/(\d{3})-(\d{3})-(\d{3})\s{1}(\d{2})/", $snils, $matches); if($matches == false) return false; $kontr = $matches[4]; $num = $matches[1].$matches[2].$matches[3]; $k=9; for($i=0;$i<9;$i++) { $sum += $k * $num{$i}; $k--; } if($sum < 100) { if($kontr == $sum) return true; else return false; } elseif($sum == 100 || $sum ==101) { if($kontr == '00') return true; else return false; } else { $ost=$sum % 101; if($ost == $kontr) return true; elseif($ost == 100 && $kontr == '00') return true; else return false; } }