Prüfziffernberechnung

Prüfziffernberechnung

am 20.08.2006 11:40:08 von KHH

Hallo zusammen,
irgendwo steh ich auf dem Schlauch :-(
Ich möchte / muss die Gültigkeit einer Kontonummer berechnen.
Das funktioniert aber leider nur ab und zu richtig :-(
irgendwas hab ich übersehen oder falsch gemacht, nur was ????
Die Testkontonummern: 94012341 funktioniuert, die andern die ich hier
aufgeführt habe funktionieren nicht.

Nachfolgend die Beschreibung der Deutschen Buindesbank, sowie die Routine
die ich danach geschreiben hab, aber wie gesagt, irgendwas stimmt nicht :-(
Danke schon mal für eure Hilfe

Gruss KH
xxxxxxxxxxxxxxxxx

Berechnungsmethode für Prüfiffern KZ 06
Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 (modifiziert)
Die einzelnen Stellen der Kontonummer sind von rechts nach links mit den
Ziffern 2, 3, 4, 5, 6, 7, 2, 3 ff. zu multiplizieren.
Die jeweiligen Produkte werden addiert.
Die Summe ist durch 11 zu dividieren.
Der verbleibende Rest wird vom Divisor (11) subtrahiert. Das Ergebnis ist
die Prüfziffer.
Ergibt sich als Rest 1, findet von dem Rechenergebnis 10 nur die Einerstelle
(0) als Prüfziffer Verwendung. Verbleibt nach der Division durch 11 kein
Rest, dann ist auch die Prüfziffer 0.
Die Stelle 10 der Kontonummer ist die Prüfziffer.
Testkontonummern: 94012341, 5073321010

weitere gültige kontonummern :
50666700
10761913
50759709
52021200





function pruefe_06($kontonr) {
// modus in $modus schreiben
$modus = '11';
// stringlänge feststellen
$stringlaenge = strlen($kontonr);
$gewichtung = '2345672345';
// kontonummer umdrehen wegen rechts nach links
$drehkontonummer = strrev($kontonr);
$erg = 0;
for ($i=0;$i<$stringlaenge;$i++){
$zwischensumme = ($drehkontonummer{$i} * $gewichtung{$i});
$zaehler = $zaehler + 1;
$erg = $erg + $zwischensumme;
} // end for
// multipikationsergebnis weiter verrechnen
$rest = $erg%$modus;

if ($stringlaenge < 10){
if ($rest == 0){
$pruefziffer = 0;

return 0 ;
exit;
} // end if
} // end if


$pruefziffer = $modus - $rest;

if ($stringlaenge < 10){
if ($pruefziffer == 10){
$pruefziffer = 0;

return 0 ;
exit;
} // end if
} // end if
if ($stringlaenge == 10){
if ($pruefziffer == $kontonr{10}){
return 0 ;
exit;
} // end if
} // end if

// im fehlerfall
return 1;


} // end function

$ok = pruefe_06('5073321010');
echo 'wert' . $ok;

?>
xxxxxxxxxxxxxxxxx

Re: Prüfziffernberechnung

am 20.08.2006 11:56:15 von Norbert Melzer

Am Sun, 20 Aug 2006 11:40:08 +0200 schrieb Karl-Heinz H.:

> Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 (modifiziert)

> $gewichtung = '2345672345';

Fällt Dir was auf?
Vllt liegt es ja daran.

HTH
Norbert
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Prüfziffernberechnung

am 20.08.2006 12:15:06 von KHH

Hallo Norbert,


> > Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 (modifiziert)
>
> > $gewichtung = '2345672345';
>
> Fällt Dir was auf?
> Vllt liegt es ja daran.

Die einzelnen Stellen der Kontonummer sind von rechts nach links mit den
Ziffern 2, 3, 4, 5, 6, 7, 2, 3 ff. zu multiplizieren.
^ ^^^^^

ich dachte gerade deswegen ists so richtig ! ???


Gruss KH

Re: Prüfziffernberechnung

am 20.08.2006 12:27:31 von Norbert Melzer

Am Sun, 20 Aug 2006 12:15:06 +0200 schrieb Karl-Heinz H.:

> Hallo Norbert,
>
>
>>> Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 (modifiziert)
>>
>>> $gewichtung = '2345672345';
>>
>> Fällt Dir was auf?
>> Vllt liegt es ja daran.
>
> Die einzelnen Stellen der Kontonummer sind von rechts nach links mit den
> Ziffern 2, 3, 4, 5, 6, 7, 2, 3 ff. zu multiplizieren.
> ^ ^^^^^
>
> ich dachte gerade deswegen ists so richtig ! ???

Ich interpretiere das so, daß man immer die Reihe 2 bis 7 multiplizieren
soll. Bei Dir würde allerdings bei einer Kontonummer die zB 11 Stellen
hat nach die 11 Stelle mit 2 Statt der geforderten 6 multipliziert
werden.

Aber ich habe das vorhin auch nur überflogen, deswegen kann ich es nicht
genauer sagen, und habe auch keine Möglichkeit zum selber testen hier.
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Prüfziffernberechnung

am 20.08.2006 13:22:01 von Stefan+Usenet

On Sun, 20 Aug 2006 11:40:08 +0200 Karl-Heinz H. wrote:
> wie gesagt, irgendwas stimmt nicht :-(
> Danke schon mal für eure Hilfe

Da ist ja das selbst schreiben einfacher, als das Analysieren:

| |
| $nr = $argv[1];
| $len = strlen($nr);
| $sum = 0;
| for($i=0; $i | $sum += $nr[$len-$i-1] * ($i%6+2);
| }
| $check = 11-$sum%11;
| if ($check >= 10) $check = 0;
|
| echo $check . "\n";
|
| ?>

Funktioniert jedenfalls fuer Deine Testfaelle.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktbörse fuer Österreich

Stefan - die Hoffnung zu kosen!
(Sloganizer)

Re: Prüfziffernberechnung

am 20.08.2006 17:13:05 von KHH

Hallo Norbert,

> Ich interpretiere das so, daß man immer die Reihe 2 bis 7 multiplizieren
> soll. Bei Dir würde allerdings bei einer Kontonummer die zB 11 Stellen
> hat nach die 11 Stelle mit 2 Statt der geforderten 6 multipliziert
> werden.

so hab ichs auch interpretiert,
hab aber vergessen zu erwähnen, dass die Kontonummern in diesem Fall
höchstens 10 Stellen haben, deshalb hab ich nach der 10 Stelle ( mit der 5)
aufgehört.

Gruss KH

Re: Prüfziffernberechnung

am 20.08.2006 17:19:51 von KHH

Hallo Stefan,

">
> | > |
> | $nr = $argv[1];
> | $len = strlen($nr);
> | $sum = 0;
> | for($i=0; $i > | $sum += $nr[$len-$i-1] * ($i%6+2);
> | }
> | $check = 11-$sum%11;
> | if ($check >= 10) $check = 0;
> |
> | echo $check . "\n";
> |
> | ?>
>
> Funktioniert jedenfalls fuer Deine Testfaelle.
Danke dir für deine Mühe.
Mit meiner Funktion kommt das Gleiche raus wie bei dir, aber das ist doch
falsch, oder ???
bei der Kontonummer 10831415 kommt 0 raus, das interpretiere ich als richtig
bei der Kontonummer 10831407 kommt 9 raus, das interpretiere ich als falsch
:-(
0 bzw 9 ist doch die Prüfziffer aber wo steht die in der Kontomummer ??
Laut Beschreibung doch an Stelle 10 ?
Ich hab das so gelesen, dass bei beiden Nummern die Prüfziffer 0 sein muss,
da es ja keine 10te Stelle gibt ??
Wenn es eine 10te Stelle gibt, dann kann die Prüfziffer auch <> 0 sein, und
muss an Stelle 10 stehen.

hab ich das soooo falsch interpretiert ???

Gruss KH

Re: Prüfziffernberechnung

am 20.08.2006 17:26:35 von Stefan+Usenet

On Sun, 20 Aug 2006 17:19:51 +0200 Karl-Heinz H. wrote:
> Mit meiner Funktion kommt das Gleiche raus wie bei dir, aber das
> ist doch falsch, oder???

Frag das die Deutsche Bank.

Die Beschreibung...

| Die Stelle 10 der Kontonummer ist die Prüfziffer.
| Testkontonummern: 94012341, 5073321010

....finde ich insofern eigenwillig, als bereits die erste Testnummer
gar keine 10 Stellen hat. Nimmst Du die jeweils letzte Ziffer als
Pruefziffer, stimmt es aber - so war es dann wohl auch gemeint.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktbörse fuer Österreich

Der Traum vom großen Glück! Stefan, so weich...
(Sloganizer)

Re: Prüfziffernberechnung

am 20.08.2006 17:40:28 von Frank Schenk

Karl-Heinz H. schrieb:
> Laut Beschreibung doch an Stelle 10 ?
> Ich hab das so gelesen, dass bei beiden Nummern die Prüfziffer 0 sein muss,
> da es ja keine 10te Stelle gibt ??
> Wenn es eine 10te Stelle gibt, dann kann die Prüfziffer auch <> 0 sein, und
> muss an Stelle 10 stehen.
>
> hab ich das soooo falsch interpretiert ???

Bissl googeln könnt nicht schaden oder?!

http://de.wikipedia.org/wiki/Kontonummer

http://www.blz-suchen.de/kontonummer.php?PHPSESSID=1ee0f69eb edaa3ab23cfcbd0364854b0


Also aus 123456 wird 0000123456 - die 6 müsste in deinem Fall dann die
Prüfziffer sein d.h. die wird nicht mit einbezogen.

Siehe auch:

http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_pru efziffernberechnung.php
http://www.bundesbank.de/download/zahlungsverkehr/zv_pz20060 6.pdf

War aber alles nicht wirklich schwer zu finden...


good luck, Frank

Re: Prüfziffernberechnung

am 20.08.2006 17:55:15 von KHH

Hallo Frank,


"> Bissl googeln könnt nicht schaden oder?!
>
> http://de.wikipedia.org/wiki/Kontonummer
>
>
http://www.blz-suchen.de/kontonummer.php?PHPSESSID=1ee0f69eb edaa3ab23cfcbd03
64854b0
>
>
> Also aus 123456 wird 0000123456 - die 6 müsste in deinem Fall dann die
> Prüfziffer sein d.h. die wird nicht mit einbezogen.
>
> Siehe auch:
>
>
http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_pru efziffernberechn
ung.php
> http://www.bundesbank.de/download/zahlungsverkehr/zv_pz20060 6.pdf
>
> War aber alles nicht wirklich schwer zu finden...



bei der Bundesbank war ich ja schon ;-)

danke dir.


Gruss KH

Re: Prüfziffernberechnung

am 22.08.2006 13:27:24 von Josi

Wird das Script, wenn es mit allen unterschiedlichen
Prüfzifferberechnungen feriggestellt ist, irgendwo verfügbar sein?

Gruss Josi

Re: Prüfziffernberechnung

am 22.08.2006 16:42:41 von Niels Braczek

Josi schrieb:

> Wird das Script, wenn es mit allen unterschiedlichen
> Prüfzifferberechnungen feriggestellt ist, irgendwo verfügbar sein?

Ich weiß zwar nicht, wovon du Prüfziffern möchtest, da du nicht
zitierst, aber du suchst vielleicht PEAR::Validate.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Prüfziffernberechnung

am 22.08.2006 18:32:03 von Josi

Niels Braczek schrieb:
> Ich weiß zwar nicht, wovon du Prüfziffern möchtest, da du nicht
> zitierst, aber du suchst vielleicht PEAR::Validate.
Hast du nicht den Thread gelesen?
Soll ich demnächst den ganzen Thread zitieren?

Re: Prüfziffernberechnung

am 22.08.2006 21:05:58 von Niels Braczek

Josi schrieb:
> Niels Braczek schrieb:

>> Ich weiß zwar nicht, wovon du Prüfziffern möchtest, da du nicht
>> zitierst, aber du suchst vielleicht PEAR::Validate.

> Hast du nicht den Thread gelesen?

Doch, aber nicht auswendig gelernt. Ich lese in 7 Newsgroups und
mehreren Foren täglich Hunderte von Mitteilungen. Du kannst nicht
erwarten, dass ich aufgrund des Betreffs genau weiß, worauf du dich
beziehst (das wird durch Ähnlichkeitshemmungen erfolgreich verhindert).=

Ebensowenig kannst du erwarten, dass ich den Thread rückwärts abgrase=
,
um das rauszukriegen.

> Soll ich demnächst den ganzen Thread zitieren?

Nein, hier hätte es völlig gereicht, wenn du

> [Prüfziffern für Kontonummern]

gesetzt hättest. Dann hätte ich dich nicht an PEAR verwiesen, weil
Kontonummern noch nicht enthalten sind.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Prüfziffernberechnung

am 23.08.2006 09:55:18 von Werner Flamme

Niels Braczek schrieb am 22.08.2006 21:05:
> Josi schrieb:
>> Niels Braczek schrieb:
>
>>> Ich weiß zwar nicht, wovon du Prüfziffern möchtest, da du nicht
>>> zitierst, aber du suchst vielleicht PEAR::Validate.
>
>> Hast du nicht den Thread gelesen?
>
> Doch, aber nicht auswendig gelernt. Ich lese in 7 Newsgroups und
> mehreren Foren täglich Hunderte von Mitteilungen. Du kannst nicht
> erwarten, dass ich aufgrund des Betreffs genau weiß, worauf du dich
> beziehst (das wird durch Ähnlichkeitshemmungen erfolgreich verhindert).
> Ebensowenig kannst du erwarten, dass ich den Thread rückwärts abgrase,
> um das rauszukriegen.

Naja, aber wenn Du nicht weißt worum es geht - warum antwortest Du dann?
:-> Ist doch sonst nicht Deine Art ;-)

Grinst
Werner

Re: Prüfziffernberechnung

am 23.08.2006 14:49:13 von Niels Braczek

Werner Flamme schrieb:
> Niels Braczek schrieb am 22.08.2006 21:05:
>> Josi schrieb:
>>> Niels Braczek schrieb:
>>=20
>>>> Ich weiß zwar nicht, wovon du Prüfziffern möchtest, da du nich=
t
>>>> zitierst, aber du suchst vielleicht PEAR::Validate.
>>=20
>>> Hast du nicht den Thread gelesen?
>>=20
>> Doch, aber nicht auswendig gelernt. Ich lese in 7 Newsgroups und
>> mehreren Foren täglich Hunderte von Mitteilungen. Du kannst nicht
>> erwarten, dass ich aufgrund des Betreffs genau weiß, worauf du dich
>> beziehst (das wird durch Ähnlichkeitshemmungen erfolgreich verhinder=
t).
>> Ebensowenig kannst du erwarten, dass ich den Thread rückwärts abgr=
ase,
>> um das rauszukriegen.
>=20
> Naja, aber wenn Du nicht weißt worum es geht - warum antwortest Du da=
nn?
> :-> Ist doch sonst nicht Deine Art ;-)

Ich habe versucht, auf das fehlende Zitat nicht einfach nur mit 'Hä?' z=
u
antworten. Wollte halt auch mal nett sein - hat wohl nicht geklappt ;-)

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------