** * @param string $iban * @return bool */ function isIbanValid( $iban ) { $iban = str_replace( ' ', '', $iban ); // Leerzeichen entfernen $length = strlen( $iban ); // die Länge der Zeichenkette ermitteln if( $length < 15 || $length > 34 ) { return false; } $first = substr( $iban, 0, 4 ); // die ersten 4 Zeichen... $last = substr( $iban, 4 ); $iban = $last . $first; // ...hinten anhängen for( $i=65; $i<=90; $i++ ) // für jeden Buchstaben im Alphabet einen Schleifendurchlauf { $letter = chr( $i ); // Buchstabe vom ASCII-Code ermitteln (65=A) $code = $i - 55; $iban = str_replace( $letter, $code, $iban ); // Buchstabe durch Code ersetzen } $length = strlen( $iban ); // neue Länge des IBAN ermitteln (wurde durch 2stellige Zahlen länger) $mod = 0; for( $i=0; $i<=$length; $i=$i + 9 ) // Hilfsmethode für die Berechnung der Prüfziffer (9er-Blöcke) { if( $mod === 0 ) // im 1. Durchgang 9 Zeichen ziehen { $block = substr( $iban, $i, 9 ); } else if( $mod < 10 ) // bei einstelligem Restwert die nächsten 8 Zeichen ziehen { $block = (string) $mod . substr( $iban, $i, 8 ); $i--; // Position um 1 Zeichen nach vorne verschieben } else // bei zweistelligem Restwert nur noch 7 Zeichen ziehen { $block = (string) $mod . substr( $iban, $i, 7 ); $i=$i - 2; // Position um 2 Zeichen nach vorne verschieben } $mod = $block % 97; // Restwert ermitteln } if( $mod === 1 ) // sofern die Prüfziffer korrekt ist muss der Restwert 1 ergeben { return true; } return false; // wird nur erreicht, wenn Script oben nicht mit 'true' beendet wird }