Hallo zusammen,
nachdem ich jetzt ein wenig ueber diesen Patch geschlafen habe bin ich
doch ein klein wenig verunsichert.
Hintergrund:
In der Beschreibung der Bundesbank heisst es:
"Ergibt die erste Berechnung der Prüfziffer nach dem
Verfahren 00 einen Prüfzifferfehler, so ist eine weitere
Berechnung vorzunehmen. Hierbei ist die Summe der
Produkte auf die nächste Halbdekade hochzurechnen. Die
Differenz ist die Prüfziffer."
D.h. (laut dem Beispiel der Bundesbank) bei einer Quersumme von 21 muss
die Prueffziffer (als Differenz zur Halbdekade 25) 4 sein (25-21).
Was aber ist im Beispiel der Kontonummer von Hr. Papke?
Bei der Kontonummer 819727 ist die Quersumme 28.
Die nächste Halbdekade (die gleichzeitig auch (Voll)Dekade ist) lautet
30. Die Differenz wäre damit 2 und die Kontonummer falsch ( 7 != 2)
Man kann den Algo aber auch so verstehen das die nächste
"echte/alleinige" Halbdekade gemeint ist, das waere die 35 und die Diff
damit 7 womit die Kontonummer richtig wäre.
Mein Patch geht von der zweiten Annahme aus (echte Halbdekaden), ich bin
aber unsicher ob der Algo so gemeint ist.
Ich habe zur Klärung versucht jemand kompetentes bei der Sparkasse
Kiel-Förde zu erreichen die diesen Algo verwendet, bisher warte ich aber
immer noch auf den Rückruf und wie ich Banken aus der Vergangenheit
kennen werde ich dort auch niemanden vor Montag erreichen.
Hat jemand gesicherte Informationen über Kontonummern die Anhaltspunkte
über die Interpretation der "Halbdekade" Definition geben können?
Ein Blick wie andere es machen hat leider auch nichts gebracht, die
meisten Validierungen die man auf Webseiten so findet akzeptieren scheinbar
beide Varianten, d.h. z.B. sowohl Kontonummer 819727 als auch 819722
Ich habe darauf die Methode auch noch einmal dahingehend angepasst (und
einen kleinen Bug entfernt) und dahingehend angepasst das beide
Varianten akzeptiert werden bis Klärung in Sicht ist.
Neue Methode 74 haengt an.
Beste Grüße,
Jochen Schrör
Hi Christian,
[...]Wenn mir jemand eine Code-Korrektur schickt, nehme ich die
gerne ins Programm und bringe eine neue Version raus.
Gruß
Christian Stimming
anbei ein Patch fuer die Methode 74.
Den Part mit "if (accountId.length() < 7)" habe ich auskommentiert da
ich in der aktuellen Methodenbeschreibung der Bundesbank keinen
Anhaltspunkt fuer diese Variante finde.
Ansonsten scheint sich bei den Berechnungsmethoden nichts geaendert zu
haben, die Berechnungen sollten damit wieder aktuell sein.
Beste Grüße,
Jochen
------------------------------------------------------------------------
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
------------------------------------------------------------------------
_______________________________________________
Aqbanking-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/aqbanking-devel
--
ECS-Solution GmbH Handelsregister Geschäftsführer Prokurist
Raiffeisenstr. 26 Kaiserslautern Jochen Schrör RA Felix Kuntz
67817 Imsbach HRB 12047 ebenda
Germany
Tel.: +49 (6302) 60971-0 Vom Präsidenten des Landgerichtes Kaisers-
Fax : +49 (6302) 60971-1 lautern zugelassenes Inkassounternehmen
AccountNumberCheck::Result method_74(int *account, int *weight,
const std::string& accountId, const
std::string& bankId) {
number2Array("2121212120", weight);
if (AccountNumberCheck::OK == algo01(10, weight, true, 10, account))
return AccountNumberCheck::OK;
// --> Modify by Jochen Schroer, 2007-06-22
// deactivate this variant because don't find it in documentation of
Pruefmethode 74
// if (accountId.length() < 7) {
// if (account[9] == (5 - (algo03a(weight, true, account, 0, 9) % 5)))
// return AccountNumberCheck::OK;
// }
if (accountId.length() == 6) {
// not shure what halfdecade means in the documentation, so I make the
implementation
// a little bit ambiguous and accept the diff to the next halfdecade
and decade as
// possible checksum
int tmp = 5 - (algo03a(weight, true, account, 0, 9) % 5); // calc diff
to next halfdecade
if (account[9] == tmp ) // check to
halfdecade
return AccountNumberCheck::OK;
if (account[9] == ((tmp + 5) % 10)) // additional
check to next decade
return AccountNumberCheck::OK;
}
// <-- end modifaction by Jochen Schroer
return AccountNumberCheck::ERROR;
}-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Aqbanking-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/aqbanking-devel