Метод isCreditCard из библиотеки Validator.js
предназначен для проверки строкового значения на соответствие формату
потенциально валидного номера кредитной карты. Основная задача
заключается не в подтверждении существования счёта или реальной
платёжеспособности, а в синтаксической и алгоритмической проверке
корректности номера.
Проверка основывается на алгоритме Луна (Luhn algorithm), который широко применяется в финансовых системах для первичной валидации идентификаторов платёжных карт.
isCreditCard(str [, options])
str Строка, содержащая предполагаемый
номер кредитной карты. Допускается наличие пробелов и дефисов, которые
обычно удаляются перед проверкой.
options (необязательный
параметр) Объект конфигурации, позволяющий уточнить правила
валидации. В зависимости от версии Validator.js может поддерживаться
ограничение по типам карт или дополнительные режимы строгой
проверки.
Пример структуры:
{
provider: 'visa' | 'mastercard' | 'amex' | 'any'
}
Значение по умолчанию — отсутствие ограничения по платёжной системе.
Проверка кредитной карты выполняется в несколько этапов:
Очистка входных данных Из строки удаляются
пробелы и символы-разделители (-, пробелы).
Проверка состава символов Допускаются только цифры. Любые буквенные символы приводят к отклонению.
Алгоритм Луна Последовательность цифр проходит контрольную проверку:
Проверка длины Для различных платёжных систем применяются диапазоны допустимой длины номера (обычно от 13 до 19 цифр).
Проверка префикса (опционально) При задании конкретного провайдера выполняется сопоставление 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
В типичной реализации учитываются основные платёжные системы:
При отсутствии фильтра по провайдеру метод работает в универсальном режиме, проверяя только структурную корректность.
Метод isCreditCard не выполняет:
Результат отражает исключительно математическую корректность номера.
Алгоритм Луна используется для выявления случайных ошибок ввода. Его ключевая особенность заключается в том, что он не предназначен для криптографической безопасности.
Пошаговая логика:
Пример:
Номер: 4539 1488 0343 6467
Промежуточные вычисления приводят к итоговой сумме, кратной 10, что подтверждает валидность.
Валидация кредитных карт с использованием isCreditCard
часто применяется на этапе предварительной проверки пользовательского
ввода:
if (!validator.isCreditCard(inputValue)) {
errors.push('Неверный номер карты');
}
Такая проверка снижает количество очевидно некорректных запросов, отправляемых на серверную часть системы.
Использование метода на сервере позволяет фильтровать заведомо ошибочные данные до обращения к платёжным API. Однако он не заменяет полноценную интеграцию с платёжными провайдерами, где выполняется:
Передача числового значения вместо строки
validator.isCreditCard(4111111111111111); // некорректное использование
Корректный вариант:
validator.isCreditCard('4111111111111111');
Ожидание финансовой проверки
Метод не предназначен для определения действительности карты в банковской системе, что часто приводит к неправильной интерпретации результата.
При использовании в многоуровневой валидации
isCreditCard обычно сочетается с дополнительными
методами:
isLength);isNumeric);trim, escape).Такой подход формирует базовый слой защиты от некорректных данных до их дальнейшей обработки.