Предмет: Информатика, автор: n7337537

JAVA

Напишите программу, которая будет проверять корректность номера кредитной карты по алгоритму Луна. Номер кредитной карты может вводится через пробелы или дефис.


Примеры номеров кредитных карт:


0000 0000 0000 0000

1234123412341234

1111-1111-1111-1111

Алгоритм Луна


Цифры проверяемой последовательности нумеруются справа налево.

Цифры, оказавшиеся на нечётных местах, остаются без изменений.

Цифры, стоящие на чётных местах, умножаются на 2.

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

Все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.

Программа должна выводить слово valid, если номер кредитной карты валидный и NO если не валидный

Ответы

Автор ответа: dsmyrnov1997
1

Ответ:

Объяснение:

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".

Автор ответа: omysss07
1

Відповідь:Вот код на 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().

Пояснення:

Похожие вопросы
Предмет: Математика, автор: Katiefriend