Что генерируем
Проверка
Что это за алгоритм
Луна — это контрольная сумма, на которую Ханс Петер Лун подал заявку в 1954 году, а патент получил в 1960-м, чтобы ловить опечатки при вводе номера от руки или по телефону. Она замечает ошибку в любой одной цифре и почти все перестановки соседних — а именно так люди и ошибаются.
Считается справа налево: каждая вторая цифра удваивается, и если вышло больше девяти — из результата вычитается девять. Всё складывается. Если сумма делится на десять, номер записан верно. Последняя цифра для того и нужна: она подбирается так, чтобы сумма сошлась.
Применяется шире, чем принято думать: банковские карты, IMEI телефонов, ICCID сим-карт, ISIN ценных бумаг, номера социального страхования в Канаде.
Важно, и это путают чаще всего. Сходящаяся контрольная сумма означает ровно одно: номер записан без опечатки. Она не означает, что такая карта существует, выпущена банком или к ней привязаны деньги. Сгенерированный здесь номер пройдёт проверку формы на вашем сайте — и не пройдёт настоящую оплату. Для проверки платежа в песочнице нужны номера, которые публикует сам платёжный шлюз (у Stripe это 4242 4242 4242 4242): эквайер знает их заранее и отвечает на них заготовленным сценарием.
Частые вопросы
Этими номерами можно оплатить?
Нет. Номер проходит только проверку контрольной суммы на стороне формы. Реального счёта за ним нет, авторизация в платёжной системе не пройдёт.
Зачем тогда такой номер?
Чтобы пройти клиентскую валидацию и дойти до логики, которую вы тестируете: маску ввода, определение типа карты, сообщения об ошибках, поведение при отказе.
Где ещё применяется алгоритм Луна?
В IMEI, некоторых номерах SIM-карт и внутренних номерах документов. Проверка здесь работает для любой последовательности с контрольной цифрой по Луну.