Parkhaus2/Zahlungsabwicklung.java

42 lines
2.0 KiB
Java
Raw Permalink Normal View History

2024-10-08 15:19:51 +02:00
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
2024-10-08 14:58:40 +02:00
class Zahlungsabwicklung {
2024-10-08 15:19:51 +02:00
// 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
2024-10-08 14:58:40 +02:00
// Kreditkartenvalidierung
public static boolean validiereKreditkarte(String kreditkartennummer) {
2024-10-08 15:19:51 +02:00
// Überprüft, ob die Kreditkartennummer dem Pattern entspricht und die Prüfziffer gültig ist
2024-10-08 14:58:40 +02:00
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) {
2024-10-08 15:19:51 +02:00
int summe = 0; // Summe zur Berechnung der Prüfziffer
boolean verdoppeln = false; // Flag, das angibt, ob die nächste Ziffer verdoppelt werden soll
2024-10-08 14:58:40 +02:00
2024-10-08 15:19:51 +02:00
// Iteriert über die Ziffern der Kreditkartennummer von hinten nach vorne
2024-10-08 14:58:40 +02:00
for (int i = kartennummer.length() - 1; i >= 0; i--) {
2024-10-08 15:19:51 +02:00
int ziffer = Character.getNumericValue(kartennummer.charAt(i)); // Holt die Ziffer als Integer
2024-10-08 14:58:40 +02:00
2024-10-08 15:19:51 +02:00
// Verdoppelt die Ziffer, wenn das Flag gesetzt ist
2024-10-08 14:58:40 +02:00
if (verdoppeln) {
2024-10-08 15:19:51 +02:00
ziffer *= 2; // Verdoppelt die Ziffer
// Wenn die verdoppelte Ziffer größer als 9 ist, wird 9 subtrahiert
2024-10-08 14:58:40 +02:00
if (ziffer > 9) {
ziffer -= 9;
}
}
2024-10-08 15:19:51 +02:00
summe += ziffer; // Fügt die Ziffer zur Gesamtsumme hinzu
verdoppeln = !verdoppeln; // Wechselt den Zustand des Verdoppelns
2024-10-08 14:58:40 +02:00
}
2024-10-08 15:19:51 +02:00
// Gibt true zurück, wenn die Summe durch 10 teilbar ist (gültige Prüfziffer)
2024-10-08 14:58:40 +02:00
return (summe % 10) == 0;
}
}