42 lines
2.0 KiB
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;
|
|
}
|
|
}
|