Метод isCreditCard

Назначение проверки кредитных карт

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

Проверка основывается на алгоритме Луна (Luhn algorithm), который широко применяется в финансовых системах для первичной валидации идентификаторов платёжных карт.


Синтаксис

isCreditCard(str [, options])

Параметры

str Строка, содержащая предполагаемый номер кредитной карты. Допускается наличие пробелов и дефисов, которые обычно удаляются перед проверкой.

options (необязательный параметр) Объект конфигурации, позволяющий уточнить правила валидации. В зависимости от версии Validator.js может поддерживаться ограничение по типам карт или дополнительные режимы строгой проверки.

Пример структуры:

{
  provider: 'visa' | 'mastercard' | 'amex' | 'any'
}

Значение по умолчанию — отсутствие ограничения по платёжной системе.


Принцип работы алгоритма

Проверка кредитной карты выполняется в несколько этапов:

  1. Очистка входных данных Из строки удаляются пробелы и символы-разделители (-, пробелы).

  2. Проверка состава символов Допускаются только цифры. Любые буквенные символы приводят к отклонению.

  3. Алгоритм Луна Последовательность цифр проходит контрольную проверку:

    • каждая вторая цифра справа удваивается;
    • если результат больше 9, вычитается 9;
    • вычисляется сумма всех цифр;
    • итог должен делиться на 10 без остатка.
  4. Проверка длины Для различных платёжных систем применяются диапазоны допустимой длины номера (обычно от 13 до 19 цифр).

  5. Проверка префикса (опционально) При задании конкретного провайдера выполняется сопоставление BIN-диапазона (Bank Identification Number).


Возвращаемое значение

Метод возвращает:

  • true — строка соответствует формально валидному номеру кредитной карты;
  • false — строка не проходит одну или несколько проверок.

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

Базовая проверка:

const validator = require('validator');

validator.isCreditCard('4111 1111 1111 1111'); // true

Проверка без разделителей:

validator.isCreditCard('5500000000000004'); // true

Некорректный номер:

validator.isCreditCard('1234 5678 9012 3456'); // false

Поведение при различных форматах входных данных

Пробелы и дефисы

validator.isCreditCard('4111-1111-1111-1111'); // true
validator.isCreditCard('4111 1111 1111 1111'); // true

Смешанные символы

validator.isCreditCard('4111a11111111111'); // false

Пустая строка

validator.isCreditCard(''); // false

Поддерживаемые типы карт

В типичной реализации учитываются основные платёжные системы:

  • Visa
  • MasterCard
  • American Express
  • Discover
  • Diners Club
  • JCB

При отсутствии фильтра по провайдеру метод работает в универсальном режиме, проверяя только структурную корректность.


Ограничения метода

Метод isCreditCard не выполняет:

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

Результат отражает исключительно математическую корректность номера.


Алгоритмическая основа (Luhn)

Алгоритм Луна используется для выявления случайных ошибок ввода. Его ключевая особенность заключается в том, что он не предназначен для криптографической безопасности.

Пошаговая логика:

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

Пример:

Номер: 4539 1488 0343 6467

Промежуточные вычисления приводят к итоговой сумме, кратной 10, что подтверждает валидность.


Применение валидации в формах

Валидация кредитных карт с использованием isCreditCard часто применяется на этапе предварительной проверки пользовательского ввода:

if (!validator.isCreditCard(inputValue)) {
  errors.push('Неверный номер карты');
}

Такая проверка снижает количество очевидно некорректных запросов, отправляемых на серверную часть системы.


Обработка на серверной стороне

Использование метода на сервере позволяет фильтровать заведомо ошибочные данные до обращения к платёжным API. Однако он не заменяет полноценную интеграцию с платёжными провайдерами, где выполняется:

  • токенизация карты;
  • проверка 3D Secure;
  • авторизация транзакции.

Частые ошибки при использовании

Передача числового значения вместо строки

validator.isCreditCard(4111111111111111); // некорректное использование

Корректный вариант:

validator.isCreditCard('4111111111111111');

Ожидание финансовой проверки

Метод не предназначен для определения действительности карты в банковской системе, что часто приводит к неправильной интерпретации результата.


Особенности интеграции

При использовании в многоуровневой валидации isCreditCard обычно сочетается с дополнительными методами:

  • проверка длины строки (isLength);
  • проверка числового формата (isNumeric);
  • очистка ввода (trim, escape).

Такой подход формирует базовый слой защиты от некорректных данных до их дальнейшей обработки.