import java.util.regex.Matcher; // Importiert die Matcher-Klasse für reguläre Ausdrücke import java.util.regex.Pattern; // Importiert die Pattern-Klasse für reguläre Ausdrücke class Zahlungsabwicklung { // Regex für eine 16-stellige Kreditkartennummer private static final String KREDITKARTEN_REGEX = "^\\d{16}$"; private static final Pattern KREDITKARTEN_PATTERN = Pattern.compile(KREDITKARTEN_REGEX); // Kompiliert den Regex zu einem Pattern // Kreditkartenvalidierung public static boolean validiereKreditkarte(String kreditkartennummer) { // Überprüft, ob die Kreditkartennummer dem Pattern entspricht und die Prüfziffer gültig ist Matcher matcher = KREDITKARTEN_PATTERN.matcher(kreditkartennummer); return matcher.matches() && validierePruefziffer(kreditkartennummer); } // Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus) private static boolean validierePruefziffer(String kartennummer) { int summe = 0; // Summe zur Berechnung der Prüfziffer boolean verdoppeln = false; // Flag, das angibt, ob die nächste Ziffer verdoppelt werden soll // Iteriert über die Ziffern der Kreditkartennummer von hinten nach vorne for (int i = kartennummer.length() - 1; i >= 0; i--) { int ziffer = Character.getNumericValue(kartennummer.charAt(i)); // Holt die Ziffer als Integer // Verdoppelt die Ziffer, wenn das Flag gesetzt ist if (verdoppeln) { ziffer *= 2; // Verdoppelt die Ziffer // Wenn die verdoppelte Ziffer größer als 9 ist, wird 9 subtrahiert if (ziffer > 9) { ziffer -= 9; } } summe += ziffer; // Fügt die Ziffer zur Gesamtsumme hinzu verdoppeln = !verdoppeln; // Wechselt den Zustand des Verdoppelns } // Gibt true zurück, wenn die Summe durch 10 teilbar ist (gültige Prüfziffer) return (summe % 10) == 0; } }