Что такое ИИН и как проверить его корректность
eric_land 29 Июня 2011 в 17:26:07
ИИН - Индивидуальный Идентификационный Номер, 12-значный цифровой код, который присваивается физическому лицу один раз и пожизненно. с 1 января 2012 года заменит РНН и СИК.
Расшифровка ИИН :
первые 6 разрядов - это дата рождения ггммдд, то есть 12 августа 1985 года в ИИНе будет 850812
7 разряд отвечает за век рождения и пол. Если цифра нечетная - пол мужской, четная - женский. 1,2 - девятнадцатый век, 3,4 - двадцатый, 5,6 - двадцать первый.
8-11 разряды - заполняет орган Юстиции.
12 разряд - контрольная цифра, которая расчитывается по определенному алгоритму
Проверка корректности ИИН :
Вспомогательная проверка. Строится на расшифровке.
вычленяем дату рождения из ИИН и проверяем её. Если дата неверна, то ИИН может быть не верен
если 7 разряд равен 0 или больше 6, то ИИН может быть не верен
Почему я пишу "может быть не верен", да потому что все решает человеческий фактор! Руки у операторов не всегда откуда надо растут, в итоге появляются ИИН с неправильно написанными датами, вместо 850812 например напишут 120885. Или опечатаются где-нибудь.
Основная проверка. По контрольной цифре, 12 разряду. Алгоритм формирования
Формируем сумму. Сумма произведения порядка разряда на его значение. То есть для 850812 сумма начнется с (1*8+2*5+3*0+4*8+5*1+5*2+...). Берем остаток от делния суммы на 11. если остаток оказывается равен 10, то идем на второй шаг. Если не равен 10, то сравниваем контрольный разряд с остатком. Если равны - ИИН корректный.
Сюда мы попадаем если в результате первого шага мы получили остаток 10. Здесь мы тоже будем суммировать произведения значений разрядов, только на этот раз не с порядковыми номерами, а с весами разрядов. Вес формируется следующим образом - остаток от деления на 11 суммы (порядковый номер разряда + 2). То есть для 850812, первый вес равен 3, второй 4 и так далее. Если вес оказывается равным 0, то вес приравнивают к 11. ну а дальше также. берем остаток от деления получившейся суммы на 11, если получаем 10, то данный ИИН не используется. Если не 10 сравниваем с контрольным разрядом.
В общем, вот так это все выглядит на php :
Кстати, алгоритм для проверки контрольного разряда подходит и к БИНам.
Расшифровка ИИН :
первые 6 разрядов - это дата рождения ггммдд, то есть 12 августа 1985 года в ИИНе будет 850812
7 разряд отвечает за век рождения и пол. Если цифра нечетная - пол мужской, четная - женский. 1,2 - девятнадцатый век, 3,4 - двадцатый, 5,6 - двадцать первый.
8-11 разряды - заполняет орган Юстиции.
12 разряд - контрольная цифра, которая расчитывается по определенному алгоритму
Проверка корректности ИИН :
Вспомогательная проверка. Строится на расшифровке.
вычленяем дату рождения из ИИН и проверяем её. Если дата неверна, то ИИН может быть не верен
если 7 разряд равен 0 или больше 6, то ИИН может быть не верен
Почему я пишу "может быть не верен", да потому что все решает человеческий фактор! Руки у операторов не всегда откуда надо растут, в итоге появляются ИИН с неправильно написанными датами, вместо 850812 например напишут 120885. Или опечатаются где-нибудь.
Основная проверка. По контрольной цифре, 12 разряду. Алгоритм формирования
Формируем сумму. Сумма произведения порядка разряда на его значение. То есть для 850812 сумма начнется с (1*8+2*5+3*0+4*8+5*1+5*2+...). Берем остаток от делния суммы на 11. если остаток оказывается равен 10, то идем на второй шаг. Если не равен 10, то сравниваем контрольный разряд с остатком. Если равны - ИИН корректный.
Сюда мы попадаем если в результате первого шага мы получили остаток 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));
}
Кстати, алгоритм для проверки контрольного разряда подходит и к БИНам.
|