====== IBAN mit PHP generieren ======
===== Derzeit nur für Deutschland, Dänemark und Malta =====
Voraussetzung für dieses Beispiel ist die Datei "[[iso_3166|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";