Как платёжные сервисы моментально определяют, что пользователь ввёл неверный номер банковской карты?

Зиберов
Деньги статья

В интернете часто приходится заполнять данные своей банковской карты для оплаты каких-либо покупок. Когда пользователь вводит номер карты, сервис сразу проверяет его на ошибки. Это делается с помощью алгоритма Луна.

Алгоритм Луна (также известный как алгоритм «модуля 10») — алгоритм вычисления контрольной цифры номера карты в соответствии со стандартом ISO/IEC 7812. Назван в честь его создателя, ученого Ханса Питера Луна. С помощью алгоритма можно выявить ошибки во введённой последовательности цифр.

Оригинальный алгоритм

  1. Определяем позиции, с которыми будем производить манипуляции: если количество цифр в последовательности чётное, то работаем с чётными позициями (0, 2, 4, ...), иначе — с нечётными (1, 3, 5, ...)
  2. Проходимся по всем цифрам слева направо и складываем их в соответствии со следующими пунктами
  3. Если цифра стоит на позиции, удовлетворяющей первому пункту, то выполняем проверку: если 2*x > 9, то вместо x прибавляем 2x — 9, иначе прибавляем 2*x, где x — текущая цифра
  4. Если цифра стоит на позиции, не удовлетворяющей первому пункту, то прибавляем её без изменений
  5. Если полученная сумма делится на 10 без остатка, то изначальная последовательность записана без ошибок. Если поделить без остатка не получилось, то номер карты был введён неверно

Реализация алгоритма Луна на языке Go

<use xlink:href="/assets/spritemap.00cf76c4.svg#sprite-copy">
func validateLuhn(cardNumber string) bool { parity := len(cardNumber) % 2 sum := 0 for i := 0; i < len(cardNumber); i++ { num := int(cardNumber[i] — '0') if (i)%2 == parity { num *= 2 if num > 9 { num -= 9 } } sum += num } return sum%10 == 0 }
Источник:
Нет комментариев. Ваш будет первым!
Загрузка...