Voraussetzung für dieses Beispiel ist die Datei „iso_3166.ini.
function getIban( $land, $bankleitzahl, $kontonummer ) { $alpha2 = getAlpha2( $land ); $bankleitzahl = trim( $bankleitzahl ); $kontonummer = trim( $kontonummer ); $kontonummer = str_pad( $kontonummer, 10, "0", STR_PAD_LEFT ); $iban = $bankleitzahl . $kontonummer . $alpha2 . "00"; 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 } $pruefziffer = 98 - $mod; $pruefziffer = str_pad( $pruefziffer, 2, '0', STR_PAD_LEFT ); return $alpha2 . $pruefziffer . $bankleitzahl . $kontonummer; } function getAlpha2( $land ) { $codes = parse_ini_file( __DIR__ . '/iso_3166.ini',1 ); $alpha2 = $codes['ALPHA-2']; $short = array_flip( $alpha2 ); if( isset( $short[$land] ) ) { return $short[$land]; } return ''; }
Test
echo getIban( "Deutschland", "12030000", "202051" ) . "\n"; echo getIban( "Deutschland", "10090000", "1234567892" ) . "\n"; echo getIban( "Deutschland", "70150000", "594937" ) . "\n"; echo getIban( "Dänemark", "5051", "1322617" ) . "\n"; echo getIban( "Malta", "44093", "9027293051" ) . "\n";