Автор оригинала: Pankaj Kumar.
Недавно я узнал, что Номера кредитных карт не являются случайными и проходят Алгоритм Луна тест.
Проверка кредитной карты Java
Любой номер кредитной карты должен пройти следующий тест:
- Начиная с самой правой цифры, мы должны удваивать каждую вторую цифру. Если двойное число больше 9, то добавьте обе цифры так, чтобы конечное число было однозначным.
- Теперь суммируйте все цифры в числе, неизмененные числа и удвоенные числа.
- Итоговая сумма должна быть кратна 10 или по модулю 10 числа должно быть 0. Если это не так, то это не действительный номер кредитной карты.
Давайте проверим это на примере кредитной карты с номером 12345678903555.
Цифры: 1,2,3,4,5,6,7,8,9,0,3,5,5,5 После удвоения: 2,2,6,4,1,6,5,8,9,0,6,5,1,5 Сумма цифр: *10 и, следовательно, действительный номер кредитной карты.
Алгоритм Луна на Java
Здесь я предоставляю программу алгоритма java Luhn для проверки номеров кредитных карт.
package com.journaldev.util; public class JavaLuhnAlgorithm { public static void main(String[] args) { validateCreditCardNumber("12345678903555"); String imei = "012850003580200"; validateCreditCardNumber(imei); } private static void validateCreditCardNumber(String str) { int[] ints = new int[str.length()]; for (int i = 0; i < str.length(); i++) { ints[i] = Integer.parseInt(str.substring(i, i + 1)); } for (int i = ints.length - 2; i >= 0; i = i - 2) { int j = ints[i]; j = j * 2; if (j > 9) { j = j % 10 + 1; } ints[i] = j; } int sum = 0; for (int i = 0; i < ints.length; i++) { sum += ints[i]; } if (sum % 10 == 0) { System.out.println(str + " is a valid credit card number"); } else { System.out.println(str + " is an invalid credit card number"); } } }
Здесь я беру входные данные для метода проверки в виде строки, чтобы он работал также там, где первая цифра равна 0.
Результатом работы вышеуказанной программы является:
12345678903555 is a valid credit card number 012850003580200 is a valid credit card number
Обратите внимание, что IMEI-номер мобильного телефона также соответствует алгоритму Луна, продолжайте и проверьте его на наличие номеров ваших кредитных карт. 🙂