Skip to content

do-/node-ru-codes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

workflow Jest coverage

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 {randomBankCard} = require ('ru-codes')
const testCardNumber = randomBankCard ({
// pre: ['2200', '2201', '2202', '2203', '2204'], // МИР
// format: true,                                  // с пробелами
}) 

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

Функции-валидаторы

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

Для успешно проверенных значений все они возвращают undefined. Отличие заключается в том, как представляются ошибки валидации:

  • isntXXX возвращают массив вида [message, {code, asis, tobe, pos}] — то есть правдоподобное значение в отличие от неправдоподобного undefined, что позволяет подставлять результат прямо в if, while и т. п., если детали ошибки не представляют интереса;
  • isXXX же, подобно функциям модуля assert, выбрасывают ошибки с соответствующими message и дополнительными полями code, asis, tobe и pos — соответственно, предназначены для применения в блоках try...catch.

Использование специальных синтаксических конструкций для обработки ошибок помогает лучше структурировать код, однако за это приходится жертвовать производительностью, поэтому для достижения максимальной скорости при массовой обработке данных следует использовать isntXXX.

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

Поле Описание Примечание
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'

Функции-генераторы

На каждый код XXX API содержит функцию randomXXX, генерирующую случайные значения необходимого формата. Необязательный аргумент opt — во всех случаях объект с набором опций:

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

Примечания

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

Контрольная сумма номера расчётного счёта определяется не сама по себе, а зависит от БИК соответствующего (вообще говоря, филиала) банка — так что связанные с этим функции имеют дополнительный аргумент bic.

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

Об ОКПО

Для кодов ОКПО, помимо 8-значных (ЮЛ) и 10-значных (ИП), встречаются также упоминания о 14-значных: обособленных подразделений. Однако реального примера такого кода в открытых данных обнаружить не удалось, как и внятной нормативной документации. В текущей версии функции *OKPO14 не реализованы.

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

О типах данных

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

About

Проверка и генерация ИНН, КПП и т. п.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published