creativeheadz
Erfahrenes Mitglied
Hey,
ich versuche seit gestern Abend, Kontonummern zu überprüfen. Dabei handelt es sich speziell um Postbank Kontonummern.
Bei der Deutschen Bundesbank gibt es eine PDF Datei, welche alle Prüfsummenberechnungsbeschreibungen beinhaltet.
http://www.bundesbank.de/download/zahlungsverkehr/zv_pz201109.pdf
Die Berechnung für die Postbank ist die Nummer 24. Diese hat folgende Beschreibung:
Modulus 11,
Gewichtung 1, 2, 3, 1, 2, 3, 1, 2, 3
Die für die Berechnung relevanten Stellen der Kontonummer befinden sich - von links nach rechts gelesen -in den Stellen 1 - 9; die Prüfziffer in Stelle 10. Die Kontonummer ist rechtsbündig zu interpretieren und ggf. mit Nullen aufzufüllen. Die einzelnen Ziffern der Kontonummer sind, beginnend mit der ersten Ziffer ungleich 0, von links nach rechts bis einschließlich Stelle 9 mit den o. g. Gewichtungsfaktoren zu multiplizieren. Zum jeweiligen Produkt ist der zugehörige Gewichtungsfaktor zu addieren (zum ersten Produkt +1, zum zweiten +2, zum dritten +3, zum Vierten +1 usw.). Das jeweilige Ergebnis ist durch 11 zu dividieren (5 : 11 = 0 Rest 5). Die sich aus der Division ergebenden Reste sind zu summieren. Die letzte Ziffer dieser Summe ist die Prüfziffer.
Ausnahmen:
1) Eine ggf. in Stelle 1 vorhandene Ziffer 3, 4, 5 oder 6 wird als 0 gewertet. Der o. g. Prüfalgorithmus greift erst ab der ersten Stelle ungleich 0.
2) Eine ggf. in Stelle 1 vorhandene Ziffer 9 wird als 0 gewertet und führt dazu, dass auch die beiden nachfolgenden Ziffern in den Stellen 2 und 3 der Kontonummer als 0 gewertet werden müssen. Der o. g. Prüfalgorithmus greift in diesem Fall alsoerst ab Stelle 4 der 10stelligen Kontonummer. Die Stelle 4 ist ungleich 0.
In der Datei werden Beispielkontonummer verwendet mit denen ich auch gearbeitet habe.
138301, 1306118605, etc..
Wenn ich nun meinen Code mit den in der PDF Datei angegebenen Kontonummern teste, funktioniert das Skript einwandfrei und die Prüfsumme ist korrekt. Sobald ich aber einmal meine "echte" Postbankkontonummer angebe bzw. die eines Freundes dann stimmt die Prüfsumme nicht. Nun stehe ich ein wenig auf dem Schlauch und weiss nicht wirklich wie ich nun am besten an das Problem herangehen soll
Hier ist nun mein Code: (Ausgabe muss noch summiert werden. Die letzte Ziffer der Summe ist die Prüfziffer.)
Gruß
ich versuche seit gestern Abend, Kontonummern zu überprüfen. Dabei handelt es sich speziell um Postbank Kontonummern.
Bei der Deutschen Bundesbank gibt es eine PDF Datei, welche alle Prüfsummenberechnungsbeschreibungen beinhaltet.
http://www.bundesbank.de/download/zahlungsverkehr/zv_pz201109.pdf
Die Berechnung für die Postbank ist die Nummer 24. Diese hat folgende Beschreibung:
Modulus 11,
Gewichtung 1, 2, 3, 1, 2, 3, 1, 2, 3
Die für die Berechnung relevanten Stellen der Kontonummer befinden sich - von links nach rechts gelesen -in den Stellen 1 - 9; die Prüfziffer in Stelle 10. Die Kontonummer ist rechtsbündig zu interpretieren und ggf. mit Nullen aufzufüllen. Die einzelnen Ziffern der Kontonummer sind, beginnend mit der ersten Ziffer ungleich 0, von links nach rechts bis einschließlich Stelle 9 mit den o. g. Gewichtungsfaktoren zu multiplizieren. Zum jeweiligen Produkt ist der zugehörige Gewichtungsfaktor zu addieren (zum ersten Produkt +1, zum zweiten +2, zum dritten +3, zum Vierten +1 usw.). Das jeweilige Ergebnis ist durch 11 zu dividieren (5 : 11 = 0 Rest 5). Die sich aus der Division ergebenden Reste sind zu summieren. Die letzte Ziffer dieser Summe ist die Prüfziffer.
Ausnahmen:
1) Eine ggf. in Stelle 1 vorhandene Ziffer 3, 4, 5 oder 6 wird als 0 gewertet. Der o. g. Prüfalgorithmus greift erst ab der ersten Stelle ungleich 0.
2) Eine ggf. in Stelle 1 vorhandene Ziffer 9 wird als 0 gewertet und führt dazu, dass auch die beiden nachfolgenden Ziffern in den Stellen 2 und 3 der Kontonummer als 0 gewertet werden müssen. Der o. g. Prüfalgorithmus greift in diesem Fall alsoerst ab Stelle 4 der 10stelligen Kontonummer. Die Stelle 4 ist ungleich 0.
In der Datei werden Beispielkontonummer verwendet mit denen ich auch gearbeitet habe.
138301, 1306118605, etc..
Wenn ich nun meinen Code mit den in der PDF Datei angegebenen Kontonummern teste, funktioniert das Skript einwandfrei und die Prüfsumme ist korrekt. Sobald ich aber einmal meine "echte" Postbankkontonummer angebe bzw. die eines Freundes dann stimmt die Prüfsumme nicht. Nun stehe ich ein wenig auf dem Schlauch und weiss nicht wirklich wie ich nun am besten an das Problem herangehen soll
Hier ist nun mein Code: (Ausgabe muss noch summiert werden. Die letzte Ziffer der Summe ist die Prüfziffer.)
PHP:
<?php
// Kontonummer
$account_number = "138301";
// Gewichtungsfaktoren
$factor = array(1,2,3,1,2,3,1,2,3,1);
// Modulus
$mod = 11;
// Ausnahme 1
$first_number = substr($account_number,0,1);
if($first_number[0] == 3 OR $first_number[0] == 4 OR $first_number[0] == 5 OR $first_number[0] == 6){
$account_number = substr($account_number,1);
}else{
// Ausnahme 2
if($first_number[0] == 9){
$account_number = substr($account_number,3);
}else{
$account_number = $account_number;
}
}
$default_length = strlen($account_number) - 1; // -1 da letzte Ziffer Prüfziffer ist nicht berechnet wird
$sum = 0;
for($i=0; $i<$default_length; $i++) {
$splited_number[$i] = substr($account_number,$i,1);
$splited_number[$i] = $splited_number[$i] * $factor[$i] + $factor[$i];
$splited_number[$i] = $splited_number[$i] % $mod ;
echo $splited_number[$i].'-';
}
?>
Gruß