validator.js предоставляет набор инструментов для проверки строковых значений, включая финансовые идентификаторы. Одним из таких форматов является ISIN — международный идентификатор ценных бумаг, используемый для однозначной идентификации финансовых инструментов.
ISIN всегда имеет фиксированную длину — 12 символов и состоит из трёх логических частей:
Пример корректного значения:
US0378331005
Каждая часть несёт строго определённую функцию, а контрольная цифра вычисляется по модифицированному алгоритму Луна.
Контрольная цифра ISIN формируется с использованием расширенного алгоритма Луна, который включает предварительное преобразование букв в числа.
Перед вычислением:
Пример:
US -> 30 28
Этот механизм позволяет выявлять большинство ошибок ввода и опечаток.
Библиотека validator.js предоставляет встроенную функцию:
validator.isISIN(str)
Функция возвращает true, если строка соответствует
стандарту ISIN и проходит проверку контрольной суммы.
npm install validator
const validator = require('validator');
или при использовании ES Modules:
import validator from 'validator';
import validator from 'validator';
const isin = 'US0378331005';
const isValid = validator.isISIN(isin);
console.log(isValid); // true или false
Функция учитывает:
ISIN может содержать как заглавные, так и строчные буквы, однако стандарт предполагает использование только uppercase:
validator.isISIN('us0378331005'); // корректно обработается
Любые символы вне диапазона [A-Z0-9] автоматически
делают значение невалидным:
validator.isISIN('US03783310@5'); // false
ISIN всегда должен иметь строго 12 символов:
validator.isISIN('US037833100'); // false (11 символов)
validator.isISIN('US03783310055'); // false (13 символов)
ISIN часто применяется в финансовых приложениях, где требуется проверка пользовательского ввода перед отправкой данных на сервер.
function validateForm(data) {
if (!validator.isISIN(data.isin)) {
throw new Error('Некорректный ISIN');
}
return true;
}
Перед валидацией часто выполняется предварительная очистка:
function normalizeISIN(value) {
return value.replace(/\s+/g, '').toUpperCase();
}
const input = ' us 0378331005 ';
const normalized = normalizeISIN(input);
validator.isISIN(normalized); // true
Удаление пробелов и приведение к верхнему регистру повышает устойчивость проверки.
ISIN отличается от:
Прямое применение других форматов приводит к ложной невалидности.
Даже корректный по структуре ISIN может быть отклонён, если контрольная цифра не совпадает с вычисленной.
Часто встречается ошибка при конкатенации данных:
'US' + '037833100' + 'X' // недопустимо, если X не контрольная цифра
ISIN часто проверяется на уровне API:
app.post('/security', (req, res) => {
const { isin } = req.body;
if (!validator.isISIN(isin)) {
return res.status(400).json({ error: 'Invalid ISIN' });
}
// дальнейшая обработка
});
Функция isISIN выполняет:
Это делает её подходящей для массовой валидации в реальном времени, включая:
Валидация ISIN через validator.js не заменяет серверную проверку бизнес-логики. Даже при успешной проверке формата необходимо учитывать:
Клиентская проверка служит только первым фильтром перед более глубокими проверками на сервере.
При работе с портфелями ценных бумаг часто требуется массовая валидация:
const isins = ['US0378331005', 'GB0002634946', 'DE000BASF111'];
const results = isins.map(isin => ({
isin,
valid: validator.isISIN(isin)
}));
Такой подход применяется в аналитических и брокерских системах для предварительной очистки данных.
В реальных приложениях ISIN часто используется вместе с другими проверками:
validator.isISIN(isin) &&
validator.isLength(description, { min: 10 }) &&
validator.isISO8601(date)
Комбинирование правил позволяет формировать строгие схемы данных для финансовых операций.