Что такое ИИН и как проверить его корректность

PHP
Топик будет важен для казахстанских разработчиков, потому что в интернете по этой теме нашел только один непонятный топик.

ИИН — Индивидуальный Идентификационный Номер, 12-значный цифровой код, который присваивается физическому лицу один раз и пожизненно. с 1 января 2012 года заменит РНН и СИК.

Расшифровка ИИН:

  • первые 6 разрядов — это дата рождения ггммдд, то есть 12 августа 1985 года в ИИНе будет 850812
  • 7 разряд отвечает за век рождения и пол. Если цифра нечетная — пол мужской, четная — женский. 1,2 — девятнадцатый век, 3,4 — двадцатый, 5,6 — двадцать первый.
  • 8-11 разряды — заполняет орган Юстиции.
  • 12 разряд — контрольная цифра, которая расчитывается по определенному алгоритму

Проверка корректности ИИН:

Вспомогательная проверка. Строится на расшифровке.
  • вычленяем дату рождения из ИИН и проверяем её. Если дата неверна, то ИИН может быть не верен
  • если 7 разряд равен 0 или больше 6, то ИИН может быть не верен

Почему я пишу «может быть не верен», да потому что все решает человеческий фактор! Руки у операторов не всегда откуда надо растут, в итоге появляются ИИН с неправильно написанными датами, вместо 850812 например напишут 120885. Или опечатаются где-нибудь.

Основная проверка. По контрольной цифре, 12 разряду. Алгоритм формирования

1. Формируем сумму. Сумма произведения порядка разряда на его значение. То есть для 850812 сумма начнется с (1*8+2*5+3*0+4*8+5*1+5*2+...). Берем остаток от делния суммы на 11. если остаток оказывается равен 10, то идем на второй шаг. Если не равен 10, то сравниваем контрольный разряд с остатком. Если равны — ИИН корректный.
2. Сюда мы попадаем если в результате первого шага мы получили остаток 10. Здесь мы тоже будем суммировать произведения значений разрядов, только на этот раз не с порядковыми номерами, а со сдвигом порядкового номера, своеобразными весами. Вес формируется следующим образом — остаток от деления на 11 суммы (порядковый номер разряда + 2). То есть для 850812, первый вес равен 3, второй 4 и так далее. Если вес оказывается равным 0, то вес приравнивают к 11. ну а дальше также. берем остаток от деления получившейся суммы на 11, если получаем 10, то данный ИИН не используется. Если не 10 сравниваем с контрольным разрядом.

В общем, вот так это все выглядит на php:
<?php 
function valid_nn($nn)
{    
    $s = 0;
    for ($i = 0; $i < 11; $i++)
    {
        $s = $s + ($i + 1) * $nn{$i};
    }
    $k = $s % 11;
    if ($k == 10)
    {
        $s = 0;
        for ($i = 0; $i < 11; $i++)
        {
            $t = ($i + 3) % 11;
            if($t == 0)
            {
                $t = 11;
            }
            $s = $s + $t * $nn{$i};
        }
        $k = $s % 11;
        if ($k == 10)
            return false;
        return ($k == substr($nn,11,1));
    }
    return ($k == substr($nn,11,1));
} 



Также этот алгоритм для проверки контрольного разряда подходит и к БИНам.


1 комментарий

avatar
а не стыдно воровать?)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.