PHP. Расшифровка украинских ИНН
Что такое ИНН (Идентификационный номер налогоплательщика)? Это не просто набор цифр. Помимо уникального идентификационного номера в нем содержится информация о дате рождения и поле его владельца. И эту информацию можно расшифровать.
В некоторых проектах необходимо контролировать правильность данных, введенных пользователем. Для того, чтобы проверить дату рождения пользователя, можно запросить ИНН, расшифровав который можно сравнить дату, введенную пользователем с датой, зашифрованной в ИНН. Кстати, в банках так и делают. Более того, можно контролировать правильность самого ИНН, так как в нем содержится контрольная цифра.
С помощью PHP можно написать функцию, которая будет возвращать расшифрованные данные в виде массива.
function ParseINN($inn = null)
{
if ( !preg_match('/^d{10}$/', $inn) || empty($inn) ) return false;
$result = array();
$result['inn'] = $inn;
$result['sex'] = (substr($inn, 8, 1) % 2) ? 'm' : 'f';
$split = str_split($inn);
$summ = $split[0]*(-1) + $split[1]*5 + $split[2]*7 + $split[3]*9 + $split[4]*4 + $split[5]*6 + $split[6]*10 + $split[7]*5 + $split[8]*7;
$result['control'] = (int)($summ - (11 * (int)($summ/11)));
$result['status'] = ($result['control'] == (int)$split[9]) ? true : false;
$inn = substr($inn, 0, 5);
$normal_date = date('d.m.Y', strtotime('01/01/1900 + ' . $inn . ' days - 1 days'));
list($result['day'], $result['month'], $result['year']) = explode('.', $normal_date);
return $result;
}
Первые пять цифр кода — количество дней, прошедших с 1 января 1900 года до дня рождения владельца. Следующие четыре цифры — порядковый номер человека родившегося в этот день. Девятая цифра означает пол. Последний символ — контрольное число. Алгоритм вычисления можно узнать из вышеприведенного кода.