Skip to content
do- edited this page May 30, 2025 · 104 revisions

ru-codes - один из модулей node.js, где реализована проверка контрольных чисел ИНН, ОГРН[ИП], ОКПО, СНИЛС, банковских счетов и карт, а также рандомизация таких данных для нужд тестирования.

Установка

npm install ru-codes

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

Проверка значения с использованием if (быстрая)

const {isntCadNum} = require ('ru-codes')

for (const record of records) {
  if (isntCadNum (record.cadastr_number)) continue
  // ... обработка record с корректным cadastr_number
}

Проверка значения с использованием try

const {isSNILS} = require ('ru-codes')

try {
  isSNILS (s)
}
catch (err) {
  switch (err.code) {
    // см. Формат результата проверки
  }
}

Генерация случайного корректного кода

const {randomINN12} = require ('ru-codes')
const testINN12 = randomINN12 ({pre: ['50', '77']}) // ИНН физлица, Москва или область

API

| Код | Проверка if | Проверка try | Генератор | Реализация | | - | - | - | - | | № р/с| isntBankAcct (str, bic) | isBankAcct (str, bic) | randomBankAcct (bic, opt) | BankAcct | № карты| isntBankCard (str) | isBankCard (str) | randomBankCard (opt) | BankCard | ИНН ФЛ | isntINN12 (str) | isINN12 (str) | randomINN12 (opt) | ScalarProduct | ИНН ЮЛ | isntINN10 (str) | isINN10 (str) | randomINN10 (opt) | ScalarProduct | Кадастровый № | isntCadNum (str) | isCadNum (str) | randomCadNum (opt) | CadNum | КПП | isntKPP (str) | isKPP (str) | randomKPP (opt) | Check | ОГРН | isntOGRN13 (str) | isOGRN13 (str) | randomOGRN13 (opt) | Horner | ОГРНИП | isntOGRN15 (str) | isOGRN15 (str) | randomOGRN15 (opt) | Horner ОКПО ЮЛ | isntOKPO8 (str) | isOKPO8 (str) | randomOKPO8 (opt) | OKPO ОКПО ИП | isntOKPO10 (str) | isOKPO10 (str) | randomOKPO10 (opt) | OKPO | СНИЛС | isntSNILS (str) | isSNILS (str) | randomSNILS (opt) | SNILS

Опции randomXXX

Имя Тип По умолчанию Описание
pre [String] [''] Массив строк, одна из которых будет выбрана в качестве префикса генерируемого значения
format Boolean false Форматировать ли сгенерированное значение (реализовано только для СНИЛС)

API в целом — функционально-ориентированный, но при желании можно использовать напрямую классы, на базе которых реализованы верхнеуровневые функции. Ссылки на документацию по таким классам приведены в правом столбце таблицы.

На каждый код XXX API содержит пару функций: проверки isXXX и генерации randomXXX.

Функции проверки ведут себя в стиле assert: то есть в норме не возвращают значения, а информацию о нарушениях выбрасывают в виде ошибок. Ошибки эти имеют дополнительные поля — см. пример выше.

Практически для всех кодов единственным аргументом isXXX является проверяемая строка, а randomXXX — набор опций, где общая для всех опция только pre. Исключения описаны по месту.

Все коды и префиксы должны быть представлены только строками. Попытка проверить, например, ИНН, заданный в виде значения типа Number или BigInt — приведёт к ошибке даже для значения с корректной контрольной суммой.

Формат результата проверки

Все функции isXXX и isntXXX для успешно проверенных строк возвращают undefined. Для строк же, не прошедших проверку:

  • isntXXX возвращают массив вида [message, {code, asis, tobe, pos}]
  • isXXX выбрасывают ошибки с соответствующими message и дополнительными полями code, asis, tobe и pos.
Поле Описание Примечание
code тип ошибки
tobe требуемое значение Если известно точно
asis обнаруженное значение Если отличается от tobe
pos позиция проблемного символа
code Описание +поля Примечание
char нецифровой символ pos
checksum контрольная сумма asis, tobe зависит от алгоритма
format символ форматирования pos '-', только для СНИЛС
length длина str asis, tobe tobe == totalLength
type тип str asis, tobe tobe == 'string'

Примечания

О банковских кодах

Примечание 1: Для БИК и корреспондентских счетов разрабатывать валидаторы и генераторы на основе контрольных чисел не имеет смысла, поскольку полный справочник этих значений содержит лишь порядка 1000 записей, а его актуальная версия всегда находится в открытом доступе и легко может быть прочитана, например, модулем ru-cbr-newbik.

Об ОКПО

Примечание 2: Помимо 8- и 10-значных кодов ОКПО, предусмотрены также 14-значные: для обособленных подразделений. Однако там предметом валидации является только отрезок из первых 8 символов: ОКПО юридического лица в целом.

Clone this wiki locally