<?php

$iban =  $_REQUEST["value"]; 


function validateIBAN($iban) {
    // Entferne Leerzeichen und mache alles zu Großbuchstaben
    $iban = strtoupper(str_replace(' ', '', $iban));

    // Länder und deren spezifische IBAN-Längen
    $ibanLengths = [
        'DE' => 22, 'AT' => 20, 'CH' => 21, 'BE' => 16, 'FR' => 27, 'GB' => 22,
        'IT' => 27, 'ES' => 24, 'NL' => 18, 'PL' => 28, 'SE' => 24, 'PT' => 25,
        'LU' => 20, 'NO' => 15, 'DK' => 18, 'FI' => 18, 'IE' => 22, 'GR' => 27,
        'CZ' => 24, 'HU' => 28, 'SK' => 24, 'SI' => 19
        // Du kannst hier noch mehr Länder hinzufügen
    ];

    // Prüfen, ob der IBAN mindestens 2 Zeichen für das Land enthält
    if (strlen($iban) < 2) {
        return false;
    }

    // Extrahiere den Ländercode
    $countryCode = substr($iban, 0, 2);

    // Prüfe, ob das Land bekannt ist
    if (!array_key_exists($countryCode, $ibanLengths)) {
        return false;
    }

    // Prüfe, ob die Länge korrekt ist
    if (strlen($iban) !== $ibanLengths[$countryCode]) {
        return false;
    }

    // Bewege die ersten 4 Zeichen ans Ende
    $ibanRearranged = substr($iban, 4) . substr($iban, 0, 4);

    // Ersetze Buchstaben durch Zahlen (A=10, B=11, ..., Z=35)
    $ibanNumeric = '';
    foreach (str_split($ibanRearranged) as $char) {
        if (ctype_alpha($char)) {
            $ibanNumeric .= ord($char) - 55;
        } else {
            $ibanNumeric .= $char;
        }
    }

    // Modulo 97 rechnen (stückweise wegen sehr großer Zahlen)
    $remainder = $ibanNumeric;
    while (strlen($remainder) > 2) {
        $block = substr($remainder, 0, 9);
        $remainder = (int)$block % 97 . substr($remainder, strlen($block));
    }

    return ((int)$remainder % 97) === 1;
}



if (validateIBAN($iban)) 
{
      $status = "success";
} else 
{
     $status = "failure";
}

$data = array( 'status' => $status, 'response' => ['IBAN nicht gültig bzw. falsch!'] );

header('Content-type: application/json');
echo json_encode( $data );

?>
