qatoolqa.ru

Алгоритм Луна: генерация и проверка номеров

Номера, проходящие проверку контрольной суммы по алгоритму Луна: карты Visa, Mastercard, МИР, а также IMEI. Работает в обе стороны — сгенерировать корректный номер или проверить существующий. Номера тестовые: клиентскую валидацию пройдут, реальный платёж — нет.

Что генерируем

Проверка

Что это за алгоритм

Луна — это контрольная сумма, на которую Ханс Петер Лун подал заявку в 1954 году, а патент получил в 1960-м, чтобы ловить опечатки при вводе номера от руки или по телефону. Она замечает ошибку в любой одной цифре и почти все перестановки соседних — а именно так люди и ошибаются.

Считается справа налево: каждая вторая цифра удваивается, и если вышло больше девяти — из результата вычитается девять. Всё складывается. Если сумма делится на десять, номер записан верно. Последняя цифра для того и нужна: она подбирается так, чтобы сумма сошлась.

Применяется шире, чем принято думать: банковские карты, IMEI телефонов, ICCID сим-карт, ISIN ценных бумаг, номера социального страхования в Канаде.

Важно, и это путают чаще всего. Сходящаяся контрольная сумма означает ровно одно: номер записан без опечатки. Она не означает, что такая карта существует, выпущена банком или к ней привязаны деньги. Сгенерированный здесь номер пройдёт проверку формы на вашем сайте — и не пройдёт настоящую оплату. Для проверки платежа в песочнице нужны номера, которые публикует сам платёжный шлюз (у Stripe это 4242 4242 4242 4242): эквайер знает их заранее и отвечает на них заготовленным сценарием.

Частые вопросы

Этими номерами можно оплатить?

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

Зачем тогда такой номер?

Чтобы пройти клиентскую валидацию и дойти до логики, которую вы тестируете: маску ввода, определение типа карты, сообщения об ошибках, поведение при отказе.

Где ещё применяется алгоритм Луна?

В IMEI, некоторых номерах SIM-карт и внутренних номерах документов. Проверка здесь работает для любой последовательности с контрольной цифрой по Луну.