#1803 closed Bug/Fehler (fixed)
Bankdaten-Prüfmethode Method06 unvollständig
| Reported by: | Volker Rehn | Owned by: | somebody |
|---|---|---|---|
| Priority: | hoch | Milestone: | modified-shop-2.0.5.1 |
| Component: | Shop | Version: | 2.0.5.0 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Eine korrekte Kontonr der Sparda-Bank Ostbayern (PRZ 84) blieb in der Bankdatenprüfung hängen. Ursache war die zentrale Prüfmethode Method06, hier definiert:
https://www.bundesbank.de/resource/blob/603320/16a80c739bbbae592ca575905975c2d0/mL/pruefzifferberechnungsmethoden-data.pdf
und in /includes/classes/banktransfer_validation.php implementiert.
Method06 kann mit verschiedenen Modulatoren aufgerufen werden (7, 10, und 11) und hat Korrekturcode für 7 und 11, falls die Checksumme nicht mit der Prüfziffer in der Kontonr verglichen werden kann, weil die Stelligkeit nicht passt. Nur für Modulator 10 hat Method06 für diesen Fall keinen Korrekturcode.
Genau der wird aber uU benötigt, wenn Mark84 Methode C anwendet, und dafür Method06 mit Modulator 10 aufruft. Mark84 wird selten benutzt (Sparda-Bank Ostbayern, Sparda-Bank Augsburg), und der Fehler tritt nur bei manchen Kontonummern dieser Banken auf, deren letzte Stelle 0 ist. Sonst ruft keine Prüfmethode die Method06 mit Modulator 10 auf (Prüfmethode Mark90 auch, aber die wird von keiner Bank verwendet). Deswegen ist der Fehler noch nicht aufgefallen.
Der neue Code für Method06:
private function Method06($AccountNo, $Significance, $Modified, $Checkpoint, $Modulator) {
$Help = 0;
$Method06 = 1;
$AccountNo = $this->ExpandAccount($AccountNo);
switch ($Modified) {
case FALSE :
for ($Run = 0; $Run < strlen($Significance);$Run++) {
$Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
}
break;
case TRUE :
for ($Run = 0; $Run < strlen($Significance);$Run++) {
$Help += (substr($AccountNo,$Run,1) * HexDec(substr($Significance,$Run,1)));
}
break;
}
$Help = $Help % $Modulator;
$Checksum = $Modulator - $Help;
// Bedingung bei Modulator 7
/* --- Fix by Christian Rothe 20110327 --- */
if ($Help == 0 && $Modulator == 7) {
$Checksum = 0;
}
// --- fix vr 20200414
if ($Help == 0 && $Modulator == 10) {
$Checksum = 0;
}
// Bedingung bei Modulator 11
if ($Help < 2 && $Modulator == 11) {
$Checksum = 0;
}
if ($Checksum == substr($AccountNo,$Checkpoint-1,1)) {
$Method06 = 0;
}
return $Method06;
}
Attachments (1)
Change History (3)
comment:1 by , 6 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
comment:2 by , 6 years ago
| Milestone: | → modified-shop-2.0.5.1 |
|---|
by , 6 years ago
| Attachment: | changeset_12700.zip added |
|---|

In 12700: