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