Генератор форм

Для веб-мастера

Реклама

Расшифровка украинского индентификационного номера налогоплательщика (ИНН) на PHP

Рейтинг:
Дата: 16 февраля 2012 Просмотры 44049 Комментарии 7
Расшифровка украинского индентификационного номера налогоплательщика (ИНН) на PHP

В одном из проектов требовалось, при регистрации пользователя  по ИНН проверять дату его рождения, а точнее при вводе ИНН автоматически записывать дату рождения в нужное поле.

Как оказалось это делается очень просто. Ведь ИНН - это не просто набор цифр. Помимо уникального идентификационного номера в нем содержится информация о дате рождения и поле его владельца. И эту информацию можно расшифровать.

Кроме определения даты рождения по ИНН, также можно проверять правильность ввода самого идентификационного номера,  так как в нем содержится контрольная цифра, которая расчитывается по определенному алгоритмы.

Первые 5 цифр в ИНН у обычных граждан Украины означают дату рождения, в виде количества дней прошедших с 1 января 1900 г. Это не секрет, в остальных цифрах защифрован пол, цифры придающие индивидуальность номеру и контрольные числа

В общем вот php код, который занимается расшифровкой.

function parse_inn($inn){
    
    //$id must contain 10 digits
    if (empty($inn) || !preg_match('/^\d{10}$/',$inn)) return false;
    
    $months = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');

    $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);
    
    $result['str_month'] = $months[$result['month'] - 1];
    
    return $result;
}

На выходе у нас будет массив, который будет содержать следующие данные:

  • inn - введенный ИНН
  • sex - Пол. m - мужской, f - женский
  • control - контрольная сумма, для проверки ИНН
  • status - результат проверки контрольной суммы. Если true - то ИНН корректный, false - не корректный
  • day - день рождения
  • month - месяц рождения
  • year - год рождения
  • str_month - русское название месяца

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

Оцените эту статью:



Интересно почитать

    Получать новые материалы этого сайта на свой email адрес?

    Отправлять мне комментарии по эл. почте?

Простая CRM

Нашли ошибку в тексте

Система Orphus
https://biznesguide.ru/coding/173.html
4 из 5 на основе 14 оценок.