JAVA
Напишите программу, которая будет проверять корректность номера кредитной карты по алгоритму Луна. Номер кредитной карты может вводится через пробелы или дефис.
Примеры номеров кредитных карт:
0000 0000 0000 0000
1234123412341234
1111-1111-1111-1111
Алгоритм Луна
Цифры проверяемой последовательности нумеруются справа налево.
Цифры, оказавшиеся на нечётных местах, остаются без изменений.
Цифры, стоящие на чётных местах, умножаются на 2.
Если в результате такого умножения возникает число больше 9, оно заменяется суммой цифр получившегося произведения — однозначным числом, то есть цифрой.
Все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.
Программа должна выводить слово valid, если номер кредитной карты валидный и NO если не валидный
Ответы
Ответ:
Объяснение:
import java.util.Scanner;
public class CreditCardValidator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите номер кредитной карты: ");
String cardNumber = scanner.nextLine();
scanner.close();
// Убираем пробелы и дефисы из номера карты
cardNumber = cardNumber.replaceAll("[ -]", "");
// Проверяем, что номер карты состоит только из цифр и имеет длину 16
if (!cardNumber.matches("\\d{16}")) {
System.out.println("NO");
return;
}
int sum = 0;
for (int i = cardNumber.length() - 1; i >= 0; i--) {
int digit = Character.getNumericValue(cardNumber.charAt(i));
// Цифры на нечетных позициях остаются без изменений
if ((cardNumber.length() - i) % 2 == 1) {
sum += digit;
} else {
// Цифры на четных позициях умножаются на 2
int doubledDigit = digit * 2;
// Если произведение больше 9, заменяем его суммой цифр
if (doubledDigit > 9) {
doubledDigit = (doubledDigit % 10) + (doubledDigit / 10);
}
sum += doubledDigit;
}
}
// Проверяем, что сумма кратна 10
if (sum % 10 == 0) {
System.out.println("valid");
} else {
System.out.println("NO");
}
}
}
Эта программа сначала считывает номер кредитной карты из консоли, затем убирает из него пробелы и дефисы и проверяет, что номер состоит только из цифр и имеет длину 16. Затем она применяет алгоритм Луна, считая сумму цифр, и проверяет, что сумма кратна 10. Если это так, программа выводит "valid", иначе - "NO".
Відповідь:Вот код на Java, который проверяет корректность номера кредитной карты по алгоритму Луна:
java
Copy code
import java.util.Scanner;
public class CreditCardValidator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter credit card number:");
String cardNumber = scanner.nextLine().replaceAll("[^0-9]", "");
if (isValidCardNumber(cardNumber)) {
System.out.println("Valid credit card number");
} else {
System.out.println("Invalid credit card number");
}
}
public static boolean isValidCardNumber(String cardNumber) {
int sum = 0;
boolean isSecondDigit = false;
for (int i = cardNumber.length() - 1; i >= 0; i--) {
int digit = cardNumber.charAt(i) - '0';
if (isSecondDigit) {
digit *= 2;
if (digit > 9) {
digit = digit % 10 + digit / 10;
}
}
sum += digit;
isSecondDigit = !isSecondDigit;
}
return sum % 10 == 0;
}
}
Эта программа сначала запрашивает номер кредитной карты у пользователя. Затем она удаляет все символы, кроме цифр, с помощью метода replaceAll() и сохраняет номер в строковую переменную cardNumber.
Далее программа вызывает метод isValidCardNumber(), который принимает номер кредитной карты в виде строки и возвращает true, если номер является валидным, и false в противном случае.
Метод isValidCardNumber() проходит по цифрам номера кредитной карты справа налево, начиная с конца строки. Для каждой цифры он сначала вычисляет, должна ли она быть умножена на 2. Это делается путем установки флага isSecondDigit, который переключается после каждой итерации цикла. Если isSecondDigit установлен в true, значит, текущая цифра должна быть умножена на 2.
Если после умножения получается число больше 9, оно заменяется на сумму его цифр. Затем цифра добавляется к общей сумме sum.
После прохождения всех цифр метод isValidCardNumber() проверяет, делится ли общая сумма на 10 без остатка. Если да, то номер кредитной карты считается валидным и метод возвращает true. В противном случае метод возвращает false.
В конце программа выводит сообщение об успехе или неудаче проверки, в зависимости от того, что возвращает метод isValidCardNumber().
Пояснення: