Описание
Проблема
В версии ru-codes@1.0.8 метод isntOGRN15 некорректно проверяет
контрольную цифру ОГРНИП.
ОГРНИП состоит из 15 цифр. Контрольная цифра рассчитывается так:
- взять первые 14 цифр;
- вычислить остаток от деления на 13;
- взять остаток результата от деления на 10;
- сравнить с 15-й цифрой.
Сейчас OGRN_15 создаётся через общий класс Horner, который наследует
логику с модулем 11:
lib/Horner.js: OGRN_15: horner(15)
lib/Horner.js: super(totalLength, 1)
lib/Check.js: modulus1 = modulus2 + 1, при одной контрольной цифре это 11.
Из-за этого isntOGRN15 использует алгоритм ОГРН для ОГРНИП.
Воспроизведение
const { isntOGRN15 } = require("ru-codes");
isntOGRN15("300000000000004");
// Сейчас: ошибка, ожидается контрольная цифра 8.
// Ожидание: undefined, поскольку 30000000000000 % 13 % 10 === 4.
isntOGRN15("300000000000008");
// Сейчас: undefined.
// Ожидание: ошибка, поскольку корректная контрольная цифра — 4.
## Ожидаемое исправление
Нужен отдельный валидатор ОГРНИП, а не использование общего Horner:
const expectedChecksum =
Number(firstFourteenDigits % 13n) % 10;
Важно не преобразовывать первые 14 цифр в JS Number: это значение может
превысить Number.MAX_SAFE_INTEGER. Нужна строковая арифметика или BigInt.
## Критерии готовности
- isntOGRN15("300000000000004") возвращает undefined;
- isntOGRN15("300000000000008") возвращает ошибку checksum;
- не меняется поведение isntOGRN13;
- добавлены unit-тесты на оба случая.
Описание
Проблема
В версии
ru-codes@1.0.8методisntOGRN15некорректно проверяетконтрольную цифру ОГРНИП.
ОГРНИП состоит из 15 цифр. Контрольная цифра рассчитывается так:
Сейчас
OGRN_15создаётся через общий классHorner, который наследуетлогику с модулем 11:
lib/Horner.js:OGRN_15: horner(15)lib/Horner.js:super(totalLength, 1)lib/Check.js:modulus1 = modulus2 + 1, при одной контрольной цифре это11.Из-за этого
isntOGRN15использует алгоритм ОГРН для ОГРНИП.Воспроизведение