Unsere Kunden sind fit für SEPA. Schon vor Monaten wurden IBAN-Berechnungsroutinen in unsere CRM-Systeme eingebaut, die automatisch anhand der bisherigen Kontodaten die SEPA-gerechten Zahlenfolgen ermitteln.
Wer immer noch eine Berechnungsroutine für SEPA sucht, findet nachfolgend eine in Perl geschriebene Funktion. Zu beachten ist, dass mit sehr großen Integerzahlen gearbeitet wird.
$iban = &IBANErmittlung($blz,$konto);
sub IBANErmittlung
{
use bigint;
use Math::BigInt;
my $blz = $_[0];
my $konto = $_[1];
my $iban = '';
return if $blz !~ m/^[1-9][0-9]{7}$/
|| $konto !~ m/[1-9]/
|| length($konto) > 10;
while (length($konto) < 10) { $konto = "0$konto"; }Was passiert in diesem Code-Fragment?
my $landkennung = 131400; # DE = 13 14 und 00
my $bban = Math::BigInt->new("$blz$konto");
my $bban2 = Math::BigInt->new("$bban$landkennung");
my $pruefziffer = $bban2 % 97;
$pruefziffer = sprintf "%.2d", 98 - $pruefziffer ;
$iban = "DE$pruefziffer$bban";
return($iban);
}
Der Funktion werden die alte Bankleitzahl und die Kontonummer übergeben. Danach wird deren Syntax überprüft. Anschließend wird die Kontonummer mit Vornullen auf zehn Stellen gefüllt. Aus BLZ und Kontonummer wird die BBAN gebildet. Diese wird rechts um die Länderkennung ergänzt. Daraus wird per Modulo 97 und der folgenden Subtraktion von 98 die Prüfziffer ermittelt. Ist die Prüfziffer einstellig, wird noch eine Null davor gesetzt.
Der Returnwert setzt sich dann aus "DE", der zweistelligen Prüfziffer und der BBAN zusammen.
Autor: Matthias Baumann