Val Petruchek

подписывайтесь, а то хуже будет!  

ПОДПИСЫВАЙТЕСЬ НА RSS

« Грузинская Опера
PHP (ссылки) »

Украинские ИНН

29.10.07 @ 14:20 — Programming, PHP, Ukraine

Встретил у Болка запись о том, как формируются номера российских ИНН. Стало интересно, как с этим обстоит дело у нас.

Итак, украинский ИНН (индивидуальный налоговый номер) состоит из 10 цифр. В нём зашифрованы:

  • дата рождения (первые пять цифр образуют число, равное количеству дней от 01.01.1900 до даты рождения владельца ИНН);
  • пол (чётность девятой цифры: четная цифра – женский, нечетная – мужской);
  • checksum, т.е. контрольное число (последняя цифра)

Как считается контрольная цифра я пока что не знаю. Здесь можно проверить, как работает большой брат, исходники большого брата — под катом.

Забавные факты про украинский ИНН:

  • физическим лицам, которые из-за своих религиозных или других убеждений отказываются от принятия идентификационного номера, официально сообщили об этом соответствующим органам государственной власти и имеют соответствующую отметку в паспорте, предоставляется идентификационный номер в виде номера и серии паспорта таких лиц (src);
  • иностранцы не могут отказаться от кодов, даже если они имеют соответствующие религиозные убеждения. Причина: украинские власти не могут внести соответствующую отметку в их паспорт (см. предыдущий пункт) и присвоить ИНН по номеру паспорта. Зачем нужен украинский ИНН иностранцу? Чтобы иметь возможность стать учредителем юрлица или заниматься предпринимательской деятельностью на территории Украины (src);
  • я не смог найти в сети информацию о том, какие ИНН присваиваются гражданам, родившимся в 19 веке (т.е. до 01.01.1900 года).

Отдельно хочется процитировать каких-то религиозных маразматиков (орфография и пунктуация сохранены):

Как здесь не заметить, что определенные проблемы будут ощущать, например, лица, которые изменили свой пол.

Понятно, что не сложно написать программу, которая к 1 января 1900 года прибавит число и получит дату рождения. Так что, милые дамы, со старинным правилом этикета, согласно которого о Вашем возрасте спрашивать было не принято, придется расстаться. У технотронного века свой жесткий и далекий от условностей приличия “этикет”.

Мой вам совет, милые дамы: если кто-то выспрашивает у вас ваш ИНН, отнеситесь к нему с подозрением!

        /*      developed by студия webous 
                http://dev.zp.ua/
                author: val petruchek
                e-mail: petruchek, собака, gmail.com
                date:   October 29, 2007                                */

function ParseUaID($id)
    {
    //$id must contain 10 digits
    if (!preg_match(‘/^\d{10}$/’,$id) || ($id==0)) 
        return false;

    $result = array();

    //sex
    $result[’sex’] = (substr($id,8,1) % 2) ? ‘M’ ‘F’;

    //birthdate
    $days substr($id,0,5);
    $year 1900$day 01$month 01;
    while ($days 0)
        {
        $daysInYear = (checkdate (0229$year)) ? 366 365;
        if ($days $daysInYear)
            {
            $days -= $daysInYear;
            $year ++;
            }
        else{
            for ($daysInMonth 31; !checkdate($month$daysInMonth$year); $daysInMonth–) ;
            if ($days $daysInMonth)
                {
                $days -= $daysInMonth;
                $month ++;
                }
            else{
                $day $days;
                $days 0;
                }
            }
        }
    $result[‘year’] = $year;
    $result[‘month’] = $month;
    $result[‘day’] = $day;

    return $result;
    }

7 Comments »

  1. 1. В регулярном выражении нехватает слеша перед «d».
    2. Проверку на нулевой id можно делать так: !$id
    3. Нечётность надо проверять вот так: $var & 1, нахождение остатка от деления — плохой способ
    4. Найти количество дней в месяце можно вызовом date(’t', $timestamp)

    …хватит, думаю :)

    Comment by BOLK — 29.10.2007 @ 14:58

  2. Bolk,

    1. WordPress съел, я что-то сразу не догадался глянуть, на каком именно этапе он потерялся.
    2. Можно так, а можно и не так. Дело вкуса.
    3. Почему плохой? Дело вкуса.
    4. Windows does not support dates prior to midnight (00:00:00), January 1, 1970 — соответственно вызов $days = date(’t', mktime(0,0,0,2,1,1940)); будет работать не везде, ага.

    Comment by Val Petruchek — 29.10.2007 @ 17:47

  3. BTW, Bolk, у тебя старые ссылки не работают, что не очень правильно при апгрейде движка.

    Comment by Val Petruchek — 29.10.2007 @ 18:00

  4. Там ещё информация есть - одна или две цифры - какой ты по порядку человек, родившийся в тот же день
    То есть если уже есть 4 ИНН у которых пять первых цифр совпадают - то одна из цифр в ИНН будет 5 (а у тех четырёх соответственно 1-4)

    Comment by Vanger — 30.10.2007 @ 10:59

  5. Vanger: на это отведены три с половиной цифры (с шестую по девятую). При этом девятая заодно хранит информацию о поле.

    Дело в том, что налоговой не под силу узнать “какой я по порядку человек, родившийся в этот день”, так что эти цифры каким-то образом меня уникально идентифицируют среди тех, кто родился со мной в один день.

    Код рассчитан под максимум 5000 мальчиков и 5000 девочек, родившихся в один день.

    Comment by Val Petruchek — 30.10.2007 @ 12:19

  6. “какой я по порядку человек, родившийся в этот день”,
    все достаточно прозаично, в порядке регистрации в налоговой,
    т.е кто раньше получил код у того номер и меньше.

    Comment by ESL — 14.03.2008 @ 09:23

  7. ESL, получается “кто раньше встал, того и тапки”.

    Спасибо.

    Comment by Val Petruchek — 14.03.2008 @ 09:59

RSS feed for comments on this post. TrackBack URI

Leave a comment

  
Реклама:: Необходим вариант медикаментозного лечения? Необходимое лечение в Германии оперативно.

 
Реклама:: организация фуршетов банкетов, Империалъ Холл :: двери производства италия, недорогие деревянные межкомнатные двери