Проверка СНИЛС: различия между версиями
Перейти к навигации
Перейти к поиску
Misha (обсуждение | вклад) (Новая страница: «Функция проверки СНИЛС <pre> function test_snils($snils) { /* СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX-XXX-XXX — с…») |
Misha (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | Функция проверки СНИЛС | + | ==Функция проверки СНИЛС== |
+ | Описание функции взято [https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE#.D0.A1.D1.82.D1.80.D0.B0.D1.85.D0.BE.D0.B2.D0.BE.D0.B9_.D0.BD.D0.BE.D0.BC.D0.B5.D1.80_.D0.B8.D0.BD.D0.B4.D0.B8.D0.B2.D0.B8.D0.B4.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BB.D0.B8.D1.86.D0.B5.D0.B2.D0.BE.D0.B3.D0.BE_.D1.81.D1.87.D1.91.D1.82.D0.B0_.28.D0.A0.D0.BE.D1.81.D1.81.D0.B8.D1.8F.29 тут] | ||
<pre> | <pre> | ||
function test_snils($snils) | function test_snils($snils) |
Версия 11:20, 2 декабря 2015
Функция проверки СНИЛС
Описание функции взято тут
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 — указано верно */ $snils=trim($snils); if(strlen($snils)!=14) return false; $kontr=substr($snils, -2); $str=substr($snils,0, 11); $k=9; for($i=0;$i<11;$i++) { if($str{$i}=='-')continue; $sum += $k * $str{$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 { if(($sum % 101) == $kontr) return true; else return false; } }