Проверка СНИЛС: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Функция проверки СНИЛС)
Строка 22: Строка 22:
 
     */
 
     */
  
     $snils=trim($snils);
+
     preg_match( "/(\d{3})-(\d{3})-(\d{3})\s{1}(\d{2})/", $snils, $matches);
     if(strlen($snils) != 14) return false;
+
     if($matches == false) return false;
     $kontr=substr($snils, -2);
+
     $kontr = $matches[4];
     $str=substr($snils,0, 11);
+
     $num = $matches[1].$matches[2].$matches[3];
 
     $k=9;
 
     $k=9;
     for($i=0;$i<11;$i++)
+
     for($i=0;$i<9;$i++)
 
     {
 
     {
        if($str{$i} == '-')continue;
+
         $sum += $k * $num{$i};
         $sum += $k * $str{$i};
 
 
         $k--;
 
         $k--;
 
     }
 
     }

Версия 12:21, 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 — указано верно
    */

    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
    {
        if(($sum % 101) == $kontr) return true;
        else return false;
    }
}