Identification Number: Ukraine

Идентификационный номер налогоплательщика Украины. Парсер и генератор ИНН.

SensioLabsInsight

Latest Version on Packagist Build Status Total Downloads

Алгоритм

Номер ИНН состоит из десяти знаков

$number = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}"

Вычисляем контрольную сумму: суммируем множители первых 9 знаков ИНН

$summ =
    ( $number{0} * -1 ) +
    ( $number{1} * 5 ) +
    ( $number{2} * 7 ) +
    ( $number{3} * 9 ) +
    ( $number{4} * 4 ) +
    ( $number{5} * 6 ) +
    ( $number{6} * 10 ) +
    ( $number{7} * 5 ) +
    ( $number{8} * 7 )

Получаем контрольное число: делим контрольную сумму на 11 по модулю, потом на 10

$digit = ( $summ % 11 ) % 10

Если контрольное число и 10 знак в ИНН совпадает - номер правильный

$digit === $number{9}

Пол определяется по 9 знаку в ИНН: четное - женщина, нечетное - мужчина

$sex = ( $number{8} % 2 ) ? MALE : FEMALE

Возраст определяется по первым 5 знакам ИНН: это количество дней от 1899-12-31

Установка

Используя Composer:

$ composer require "iiifx-production/ukraine-identification-number:1.*"

Использование

Парсер ИНН:

use iiifx\Identification\Ukraine\Parser;

# Номер ИНН
$number = '2245134075';

# Создаем парсер
$parser = Parser::create( $number );
# Или так
$parser = new Parser( $number );

# Проверяем правильность ИНН
if ( $parser->isValidNumber() ) {

    $parser->getNumber(); # 2245134075

    # Определяем пол владельца ИНН
    $parser->getPersonSex(); # Parser::SEX_MALE
    $parser->isPersonMale(); # true
    $parser->isPersonFemale(); # false

    # Определяем возраст и дату рождения
    $parser->getPersonAge(); # 55
    $parser->getPersonBirth( 'Y-m-d' ); # 1961-06-20
    $parser->getPersonBirthDatetime()->format( 'd.m.Y H:i:s' ); # 20.06.1961 00:00:00

    # Контрольная сумма и число
    $parser->getControlSumm(); # 192
    $parser->getControlDigit(); # 5
}

Генератор ИНН:

use iiifx\Identification\Ukraine\Builder;

# Создаем генератор
$builder = new Builder();
# Или вот так
$builder = Builder::create( Builder::SEX_MALE, new DateTime( '2010-05-12' ) );

# Указывам пол
$builder->setPersonSex( Builder::SEX_MALE );
$builder->setPersonMale();
$builder->setPersonFemale();

# Указываем возраст
$builder->setPersonAge( 55 );
$builder->setPersonBirthDatetime( new DateTime( '1962-11-03' ) );

# Генерируем ИНН
$builder->createNumber(); # 2295209520

Тесты

Build Status Code Coverage

Лицензия

Software License