Hallo zusammen,
ich habe das Gefühl ich verstehe die Logik nicht ganz, oder irgend etwas anderes...
Ich versuche mittels der Prüfziffernberechnungsmethoden von der Deutschen Bundesbank diverse Kontonummern zu validieren.
Für das Kennzeichen 00 habe ich folgende PHP Funktion geschrieben:
Die Funktion "crossfoot" berechnet mir die Quersumme.
Test von der Deutschen Bank zur Kennziffer 00:
Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1, 2
Die Stellen der Kontonummer sind von rechts nach links mit
den Ziffern 2, 1, 2, 1, 2 usw. zu multiplizieren. Die jeweiligen
Produkte werden addiert, nachdem jeweils aus den
zweistelligen Produkten die Quersumme gebildet wurde (z. B.
Produkt 16 = Quersumme 7). Nach der Addition bleiben
außer der Einerstelle alle anderen Stellen unberücksichtigt.
Die Einerstelle wird von dem Wert 10 subtrahiert. Das
Ergebnis ist die Prüfziffer (10. Stelle der Kontonummer).
Ergibt sich nach der Subtraktion der Rest 10, ist die
Prüfziffer 0.
Testkontonummern: 9290701, 539290858, 1501824, 1501832
Habe ich etwas vergessen?
ich habe das Gefühl ich verstehe die Logik nicht ganz, oder irgend etwas anderes...
Ich versuche mittels der Prüfziffernberechnungsmethoden von der Deutschen Bundesbank diverse Kontonummern zu validieren.
Für das Kennzeichen 00 habe ich folgende PHP Funktion geschrieben:
PHP-Code:
protected function _calcMethod_00($iACN)
{
settype($iACN, "string");
$iACN = strrev($iACN);
$sCheck =
$this->crossfoot($iACN[0]*2) + $iACN[1] +
$this->crossfoot($iACN[2]*2) + $iACN[3] +
$this->crossfoot($iACN[4]*2) + $iACN[5] +
$this->crossfoot($iACN[6]*2) + $iACN[7] +
$this->crossfoot($iACN[8]*2) + $iACN[9];
settype($sCheck, "string");
print "Checknum: " . $sCheck . "<br />";
$sPruefSum = 10 - $sCheck[1];
print "Prüfsumme: " . $sPruefSum . " (10 - " . $sCheck[1] . ")<br />";
if ($sPruefSum == '10') { $sPruefSum = 0; }
if ($sPruefSum == $iACN[0]) {
print 'VALID';
} else {
print 'INVALID';
}
}
PHP-Code:
protected function crossfoot($iNumber)
{
if (strlen($iNumber) == 2) {
settype($iNumber, "string");
$res = 0;
for($i=0; $i<strlen($iNumber); $i++)
{
$res = $res + $iNumber[$i];
}
print "Crossfoot from " . $iNumber . " = " . $res. "<br />";
} else {
print "Number: " . $iNumber . "<br />";
$res = $iNumber;
}
return $res;
}
Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1, 2
Die Stellen der Kontonummer sind von rechts nach links mit
den Ziffern 2, 1, 2, 1, 2 usw. zu multiplizieren. Die jeweiligen
Produkte werden addiert, nachdem jeweils aus den
zweistelligen Produkten die Quersumme gebildet wurde (z. B.
Produkt 16 = Quersumme 7). Nach der Addition bleiben
außer der Einerstelle alle anderen Stellen unberücksichtigt.
Die Einerstelle wird von dem Wert 10 subtrahiert. Das
Ergebnis ist die Prüfziffer (10. Stelle der Kontonummer).
Ergibt sich nach der Subtraktion der Rest 10, ist die
Prüfziffer 0.
Testkontonummern: 9290701, 539290858, 1501824, 1501832
Habe ich etwas vergessen?
Kommentar