Магия цифр вашей кредитки

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

Совсем недавно я занимался прикручиванием платежной системы к сайту клиента и совершенно случайно наткнулся на одну интересную вещь. Оказывается, номера кредиток – это не просто набор случайных цифр. Эти цифры несут в себе определенный смысл и выстроены по известным алгоритмам. В этой статье мы разберем, как можно проверить номер кредитной карты на подлинность.

Номера кредитных карт бывают разной длины. Мы будем рассматривать 16-значные номера, которые используются для кредитных карт Visa и MasterCard. Первая цифры номера определяет пренадлежность к платежной системе. Посмотрев на нее, мы можем сразу сказать, что это за тип карты.

Самые популярные варианты:

Первые шесть цифр карты представляют собой БИН – банковский идентификатор, в котором содержится информация о компании, выпустившей карту. С помощью проверки этого номера можно ограничить круг принимаемых карт. Цифры с 7 по 15 – номер счета владельца карты, в котором также зашифрован тип карты – кредитная или дебетовая, валюта, регион выпуска и другая информация. Последняя цифра представляет собой проверочное число, которое используется для проверки подлинности номера.

Проверка подлинности

Для проверки подлинности используется алгоритм “Луна”. Подробнее вы можете почитать об этом алгоритме в википедии. Я же покажу на примере, как проверить подлинность номера кредитной карты.

Итак, возьмем в качестве примера следующий номер – 4417 1234 5678 9113.

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

Сначала необходимо удвоить каждую вторую цифру справа. В результате получаем:

(4*2) 4 (1*2) 7 (1*2) 2 (3*2) 4 (5*2) 6 (7*2) 8 (9*2) 1(1x2) 3

Затем нам нужно сложить все полученные цифры. Если после удваивания получилось двухзначное число, то мы его считаем как сумму цифр, например:

7 * 2 = 14 = 1 + 4 = 5

Получим:

3 + 2 + 1 + (1 + 8) + 8 + (1 + 4) + 6 + (1 + 0) + 4 + 6 + 2 + 2 + 7 + 2 + 4 + 8 = 70

Если конечный результат (70) делится на 10 без остатка – значит номер карты верный.

Проверка подлинности номера на JavaScript

Пример кода на JavaScript для проверки валидности номер карты:

function is_valid_cc_number(nums) {
  var result = 0;
  
  for (var i = 0; i < nums.length; i++) {
    result += parseInt(((nums.length - i) % 2 ) ? nums[i] : ((nums[i] * 2)
  }
  
  return !result;
}

Тестовые номера кредитных карт

В процессе отладки функции приема платежей, часто нужно проверить работу системы. Для этого можно использовать тестовые номера кредитных кард. Эти номера успешно приходят валидацию по вышеуказанному алгоритму. Несколько номеров для самых популярных видов карт:

Если вам нужны другие номера - то они есть. Где искать, вы и сами знаете ;)