Identification Number: Ukraine

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

Алгоритм

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

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

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

$sum =
    ( $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 = ( $sum % 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

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

Парсер ИНН:

use iiifx\Identification\Ukraine\Parser;

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

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

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

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

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

    # Контрольная сумма и число
    echo $parser->getControlSum(); # 192
    echo $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'));

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

Тесты

Удалены, нужно перенастраивать

Лицензия

Software License