Як перевірити номер банківської карти без банку, або алгоритм Луна.

Як визначають відсутність помилки номера карти в платіжних сервісах, невже вони, щоб перевірити чи правильно користувач увів номер карти відправляють його до банків - ні все простіше. Як це зробити без відправки запиту до банку? Дуже просто, потрібно застосувати алгоритм Луна.

Що собою являє цей алгоритм - беремо номер карти із 16 цифр, з них беремо 1-шу, 3-тю, 5-ту, 7-му, 9-ту, 11-ту, 13-ту, 15-ту - цифру і множимо її на 2 і ставимо на місце (якщо в процесі множення на 2 число перевищує, або рівне 10 то додаємо дві цифри цього числа, тобто у випадку із 12 - 1+2 і буде 3). Фінальний крок сумуємо усі цифри номера карти після обробки та результат має ділитися на 10 без залишку інакше номер карти є неправильним.

Все це можливо, тому що остання цифра номера карти є контрольною і завдяки їй вдається перевіряти правильність номера карти (щось типу хеша md5).

По кроках.
Крок 1.
Беремо кожну другу цифру номера і множимо на 2, якщо результат понад 10, то сумуємо цифри числа між собою. Ставимо результат на місце.

Крок 2
Сумуємо всі цифри карти між собою.

Крок 3
Результат скасування має ділитися на 10 без залишку інакше номер карти неправильний.
Приклад коду на python.

nb = list('<credit_cart_number_16_digits>')

for x in [0, 2, 4, 6, 8, 10, 12, 14]:
    r = int(nb[x]) * 2
    if r >= 10:
        r = int(list(str(r))[0]) + int(list(str(r))[1])
    nb[x] = str(r)

sn = 0

for i in nb:
    sn += int(i)

if sn % 10 == 0:
    print('Number bank cart correct!')
else:
    print('invalid cart number')

Висновок.

Такий алгоритм дуже корисний для перевірки правильності номерів, він багато де використовується: номери IMEI, американських NPIN

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
БК
Богдан Карпов@bohdan_karpov

180Прочитань
2Автори
1Читачі
На Друкарні з 2 травня

Вам також сподобається

Коментарі (2)

Дякую за цікавий довгочит! Завжди було цікаво як так воно перевіряє на правильність, ще й миттєво

Вам також сподобається