Проверка контрольных сумм

Контрольная сумма представляет собой вычисляемое значение, добавляемое к последовательности данных для проверки её целостности и корректности. Валидация на основе контрольных сумм применяется в финансовых системах, идентификаторах документов, товарных кодах и сетевых протоколах. В библиотеке Validator.js реализован набор алгоритмов, позволяющих проверять распространённые форматы идентификаторов, использующих контрольные суммы.


Контрольная сумма формируется на основе набора символов исходного идентификатора с применением математического алгоритма. Основная задача — обнаружение ошибок ввода и передачи данных.

Типовые задачи, решаемые контрольными суммами:

  • выявление одиночных ошибок в символах;
  • обнаружение перестановки соседних цифр;
  • проверка структурной целостности идентификатора;
  • снижение вероятности случайных ошибок при ручном вводе.

Наиболее распространённые алгоритмы:

  • Luhn algorithm — банковские карты и некоторые идентификаторы;
  • ISO/IEC 7064 — IBAN и другие финансовые коды;
  • Modulus 11 — ISBN-10 и некоторые национальные системы;
  • специализированные схемы для ISIN, IMEI и VAT.

Валидация банковских карт (Luhn Algorithm)

Алгоритм Луна применяется для проверки номеров банковских карт и ряда идентификаторов платёжных систем. Validator.js реализует эту проверку через функцию:

validator.isCreditCard(value)

Алгоритм работает следующим образом:

  1. Цифры номера обрабатываются справа налево.
  2. Каждая вторая цифра удваивается.
  3. Если результат превышает 9, выполняется вычитание 9.
  4. Все цифры суммируются.
  5. Валидность подтверждается, если сумма кратна 10.

Пример использования:

validator.isCreditCard('4111111111111111'); // true
validator.isCreditCard('1234567890123456'); // false

Поддерживаются основные платёжные системы: Visa, MasterCard, American Express, Discover, JCB.


Проверка IBAN

IBAN (International Bank Account Number) используется для международной идентификации банковских счетов. В Validator.js применяется функция:

validator.isIBAN(value)

Алгоритм проверки основан на стандарте ISO 13616:

  1. Первые четыре символа переносятся в конец строки.
  2. Буквы заменяются числами (A=10, B=11 и т.д.).
  3. Полученное число интерпретируется как большое целое.
  4. Выполняется проверка остатка от деления на 97.

Пример:

validator.isIBAN('GB82WEST12345698765432'); // true
validator.isIBAN('DE89370400440532013000');  // true

IBAN строго зависит от страны, поэтому Validator.js учитывает локальные форматы длины и структуры.


ISBN: идентификаторы книг

ISBN используется для уникальной идентификации книг и изданий. Поддерживаются два формата:

  • ISBN-10
  • ISBN-13

Функция Validator.js:

validator.isISBN(value, version)

ISBN-10

Использует модуль 11:

  • каждая цифра умножается на вес от 10 до 1;
  • сумма делится на 11;
  • остаток определяет контрольный символ (включая X как 10).

ISBN-13

Основан на модифицированном алгоритме EAN:

  • веса чередуются 1 и 3;
  • сумма проверяется по модулю 10.

Примеры:

validator.isISBN('3-16-148410-X', 10); // true
validator.isISBN('9783161484100', 13);  // true

ISIN: международные ценные бумаги

ISIN (International Securities Identification Number) применяется для идентификации финансовых инструментов.

Проверка:

validator.isISIN(value)

Структура ISIN:

  • 2 буквы (страна эмитента);
  • 9 буквенно-цифровых символов;
  • 1 контрольная цифра.

Алгоритм включает преобразование букв в числа и применение Luhn-подобной схемы.

Пример:

validator.isISIN('US0378331005'); // true

IMEI: идентификатор мобильных устройств

IMEI (International Mobile Equipment Identity) используется для уникальной идентификации мобильных устройств.

Проверка:

validator.isIMEI(value)

Алгоритм основан на Luhn, но применяется к 15-значному числу.

Пример:

validator.isIMEI('356938035643809'); // true

IMEI содержит TAC (код типа устройства), серийный номер и контрольную цифру.


Проверка VAT-номеров

VAT (Value Added Tax Identification Number) используется для налоговой идентификации в странах ЕС.

Функция:

validator.isVAT(value, countryCode)

Особенности:

  • структура зависит от страны;
  • проверка может включать формат и контрольные символы;
  • некоторые страны используют упрощённую валидацию без строгой контрольной суммы.

Пример:

validator.isVAT('DE123456789', 'DE'); // true

Обобщённая модель проверки контрольных сумм

Validator.js унифицирует работу с различными алгоритмами через единый подход:

  • входная строка нормализуется;
  • удаляются недопустимые символы;
  • применяется специфический алгоритм проверки;
  • возвращается булев результат.

Общая архитектура позволяет использовать одинаковый интерфейс для разных типов данных:

  • кредитные карты;
  • банковские счета;
  • товарные и книжные идентификаторы;
  • мобильные устройства;
  • финансовые инструменты.

Особенности применения в прикладных системах

Валидация контрольных сумм применяется на разных уровнях:

Клиентская проверка

  • снижение количества ошибочных запросов;
  • мгновенная обратная связь при вводе данных;
  • уменьшение нагрузки на сервер.

Серверная проверка

  • защита от подделки данных;
  • дополнительный уровень контроля целостности;
  • проверка внешних интеграций.

Ограничения

  • контрольная сумма не гарантирует подлинность объекта;
  • корректный формат не означает существование идентификатора;
  • некоторые алгоритмы чувствительны к локальным правилам стран.

Сравнение алгоритмов контроля целостности

Тип идентификатора Алгоритм Особенности
Банковские карты Luhn Простота, устойчивость к одиночным ошибкам
IBAN ISO 7064 Высокая строгость, международный стандарт
ISBN Mod 11 / Mod 10 Исторически разнородная система
ISIN Luhn-подобный Финансовая сфера
IMEI Luhn Аппаратная идентификация

Контрольные суммы в Validator.js образуют отдельный слой валидации, ориентированный на структурную проверку идентификаторов. Их использование позволяет стандартизировать обработку распространённых форматов данных и снизить вероятность ошибок при работе с критически важной информацией.