Parkhaus2/Zahlungsabwicklung.java

42 lines
2.0 KiB
Java

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;
}
}