-
Notifications
You must be signed in to change notification settings - Fork 0
Home
ru-codes - один из модулей node.js, где реализована проверка контрольных чисел ИНН, ОГРН[ИП], ОКПО, СНИЛС, банковских счетов и карт, а также рандомизация таких данных для нужд тестирования.
npm install ru-codesconst {isntCadNum} = require ('ru-codes')
for (const record of records) {
if (isntCadNum (record.cadastr_number)) continue
// ... обработка record с корректным cadastr_number
}const {isSNILS} = require ('ru-codes')
try {
isSNILS (s)
}
catch (err) {
switch (err.code) {
// см. Формат результата проверки
}
}const {randomINN12} = require ('ru-codes')
const testINN12 = randomINN12 ({pre: ['50', '77']}) // ИНН физлица, Москва или область| Код | Проверка 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 |
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
pre |
[String] |
[''] |
Массив строк, одна из которых будет выбрана в качестве префикса генерируемого значения |
format |
Boolean |
false |
Форматировать ли сгенерированное значение (реализовано только для СНИЛС) |
API в целом — функционально-ориентированный, но при желании можно использовать напрямую классы, на базе которых реализованы верхнеуровневые функции. Ссылки на документацию по таким классам приведены в правом столбце таблицы.
На каждый код XXX API содержит пару функций: проверки isXXX и генерации randomXXX.
Функции проверки ведут себя в стиле assert: то есть в норме не возвращают значения, а информацию о нарушениях выбрасывают в виде ошибок. Ошибки эти имеют дополнительные поля — см. пример выше.
Практически для всех кодов единственным аргументом isXXX является проверяемая строка, а randomXXX — набор опций, где общая для всех опция только pre. Исключения описаны по месту.
Все коды и префиксы должны быть представлены только строками. Попытка проверить, например, ИНН, заданный в виде значения типа Number или BigInt — приведёт к ошибке даже для значения с корректной контрольной суммой.
На каждый код 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' |
Для БИК и корреспондентских счетов разрабатывать валидаторы и генераторы на основе контрольных чисел не имеет смысла, поскольку полный справочник этих значений содержит лишь порядка 1000 записей, а его актуальная версия всегда находится в открытом доступе и легко может быть прочитана, например, модулем ru-cbr-newbik.
Помимо 8- и 10-значных кодов ОКПО, предусмотрены также 14-значные: для обособленных подразделений. Однако там предметом валидации является только отрезок из первых 8 символов: ОКПО юридического лица в целом.