Skip to content

isntOGRN15 использует mod 11 вместо mod 13 для проверки ОГРНИП #1

Description

@Maximillllian

Описание

Проблема

В версии ru-codes@1.0.8 метод isntOGRN15 некорректно проверяет
контрольную цифру ОГРНИП.

ОГРНИП состоит из 15 цифр. Контрольная цифра рассчитывается так:

  1. взять первые 14 цифр;
  2. вычислить остаток от деления на 13;
  3. взять остаток результата от деления на 10;
  4. сравнить с 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-тесты на оба случая.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions