Validator.js предоставляет набор методов для проверки строковых
значений на соответствие различным стандартам, включая формат ISBN.
Проверка ISBN (International Standard Book Number) в этой библиотеке
реализована через универсальный метод isISBN, который
поддерживает как ISBN-10, так и ISBN-13 и учитывает правила контрольных
сумм, допустимые разделители и символы.
ISBN существует в двух основных форматах:
Формат, использовавшийся до перехода на ISBN-13. Состоит из 10 символов:
XКонтрольная сумма вычисляется по модулю 11 с весами от 10 до 1. Если
результат равен 10, используется X.
Пример:
0-306-40615-2
Современный формат, основанный на EAN-13:
Пример:
978-3-16-148410-0
Основной метод проверки:
validator.isISBN(str [, version])
str — строка ISBN для проверки
version — необязательный параметр:
10 — проверка только ISBN-1013 — проверка только ISBN-13undefined — проверка обоих форматовimport validator from 'validator';
validator.isISBN('978-3-16-148410-0'); // true
validator.isISBN('0-306-40615-2'); // true
validator.isISBN('0-306-40615-2', 10); // true
validator.isISBN('0-306-40615-2', 13); // false
validator.isISBN('978-3-16-148410-0', 13); // true
validator.isISBN('978-3-16-148410-0', 10); // false
ISBN часто приходит в разных форматах записи:
Validator.js автоматически нормализует строку перед проверкой.
Примеры эквивалентных значений:
9783161484100
978-3-16-148410-0
978 3 16 148410 0
Все они могут быть корректно распознаны как ISBN-13.
Validator.js выполняет следующие шаги:
Формула:
(1×d1 + 2×d2 + ... + 10×d10) mod 11 === 0
Где d10 может быть X, интерпретируемым как
10.
Особое внимание уделяется последнему символу:
X (только в последней позиции)Для ISBN-13 используется модуль 10:
Формула:
(d1 + 3×d2 + d3 + 3×d4 + ... + d13) mod 10 === 0
Контрольная цифра подбирается так, чтобы сумма была кратна 10.
Метод isISBN возвращает строго булево значение:
true — строка соответствует стандарту ISBNfalse — любое отклонение от форматаТипичные причины возврата false:
X)versionПримеры:
validator.isISBN('1234567890'); // false (невалидная контрольная сумма)
validator.isISBN('978-3-16-148410-9'); // false (ошибка checksum)
validator.isISBN('0-306-40615-X', 13); // false (неверная версия)
Библиотека не требует предварительной очистки строки:
X)Несмотря на гибкость ввода, проверка остаётся строгой:
Не поддерживаются:
function validateBookForm(isbn) {
return validator.isISBN(isbn);
}
if (!validator.isISBN(book.isbn, 13)) {
throw new Error('Некорректный ISBN-13');
}
const validIsbns = list.filter(item =>
validator.isISBN(item)
);
ISBN часто используется вместе с другими проверками:
validator.isISBN(str) &&
validator.isLength(str, { min: 10, max: 17 }) &&
validator.isAlphanumeric(str.replace(/-/g, ''))
Хотя такая комбинация обычно избыточна, она может использоваться при строгой бизнес-валидации.
validator.isISBN('978-3-16-148410-0', 10); // всегда false
// не требуется
const cleaned = isbn.replace(/-/g, '');
validator.isISBN(cleaned);
Метод не возвращает тип ISBN, только факт валидности.
Если передана не строка:
validator.isISBN(9783161484100); // false
validator.isISBN(null); // false
validator.isISBN(undefined); // false
Валидация выполняется только над строковыми значениями.