Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:get_iban

IBAN mit PHP generieren

Derzeit nur für Deutschland, Dänemark und Malta

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";
php/get_iban.txt · Zuletzt geändert: 2020/12/17 10:02 von webproducer