Identification Number: Ukraine
Идентификационный номер налогоплательщика Украины. Парсер и генератор ИНН.
Алгоритм
Номер ИНН состоит из десяти знаков
$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