ru-codes
v1.0.6
Published
Проверка и генерация ИНН, КПП и т. п.
Downloads
40
Readme
ru-codes - один из модулей node.js, где реализована проверка контрольных чисел ИНН, ОГРН[ИП], ОКПО, СНИЛС, банковских счетов и карт, а также рандомизация таких данных для нужд тестирования.
Установка
npm install ru-codes
API
| Код | Функция проверки | Генератор | Реализация |
| - | - | - | - |
| № р/с| isBankAcct (str, bic)
| randomBankAcct (bic, opt)
| BankAcct
| № карты| isBankCard (str)
| randomBankCard (opt)
| BankCard
| ИНН ФЛ | isINN12 (str)
| randomINN12 (opt)
| ScalarProduct
| ИНН ЮЛ | isINN10 (str)
| randomINN10 (opt)
| ScalarProduct
| КПП | isKPP (str)
| randomKPP (opt)
| Check
| ОГРН | isOGRN13 (str)
| randomOGRN13 (opt)
| Horner
| ОГРНИП | isOGRN15 (str)
| randomOGRN15 (opt)
| Horner
ОКПО ЮЛ | isOKPO8 (str)
| randomOKPO8 (opt)
| OKPO
ОКПО ИП | isOKPO10 (str)
| randomOKPO10 (opt)
| OKPO
| СНИЛС | isSNILS (str)
| randomSNILS (opt)
| SNILS
Примечание 1: Для БИК и корреспондентских счетов разрабатывать валидаторы и генераторы на основе контрольных чисел не имеет смысла, поскольку полный справочник этих значений содержит лишь порядка 1000 записей, а его актуальная версия всегда находится в открытом доступе.
Примечание 2: Помимо 8- и 10-значных кодов ОКПО, предусмотрены также 14-значные: для обособленных подразделений. Однако там предметом валидации является только отрезок из первых 8 символов: ОКПО юридического лица в целом.
Опции randomXXX
| Имя | Тип | По умолчанию | Описание
| - | - | - | - |
| pre
| [String]
| ['']
| Массив строк, одна из которых будет выбрана в качестве префикса генерируемого значения
| format
| Boolean
| false
| Форматировать ли сгенерированное значение (реализовано только для СНИЛС)
Использование
const {isSNILS, randomINN12, /*...*/} = require ('ru-codes')
const testINN12 = randomINN12 ({pre: ['50', '77']}) // ИНН физлица, Москва или область
try {
isSNILS (s)
}
catch (err) {
switch (err.code) {
case 'type':
// err.type -- это typeof аргумента, оказавшийся не string
case 'length':
// err.tobe -- требуемая длина строки
// err.asis -- реальная длина строки
case 'char':
// err.value -- символ не попавший в интервал '0'..'9'
// err.pos -- позиция этого символа (от 0)
case 'format':
// err.pos -- позиция проблемного символа (для формата СНИЛС)
case 'checksum':
// err.tobe -- контрольная сумма, вычисленная по основной части строки
// err.asis -- значение контрольной суммы, прочитанное непосредственно из строки
default:
throw err
}
}
API в целом — функционально-ориентированный, но при желании можно использовать напрямую классы, на базе которых реализованы верхнеуровневые функции. Ссылки на документацию по таким классам приведены в правом столбце таблицы.
На каждый код XXX
API содержит пару функций: проверки isXXX
и генерации randomXXX
.
Функции проверки ведут себя в стиле assert: то есть в норме не возвращают значения, а информацию о нарушениях выбрасывают в виде ошибок. Ошибки эти имеют дополнительные поля — см. пример выше.
Практически для всех кодов единственным аргументом isXXX
является проверяемая строка, а randomXXX
— набор опций, где общая для всех опция только pre
. Исключения описаны по месту.
Все коды и префиксы должны быть представлены только строками. Попытка проверить, например, ИНН, заданный в виде значения типа Number или BigInt — приведёт к ошибке даже для значения с корректной контрольной суммой.