ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
564
564
EMPFEHLEN
-
Es geht darum den Algorythmus der Prüfzifferberechnung der Schweizer Post irgendwie mit PHP umzusetzen.
Ich habe von der Post einen Codeschnippsel bekommen aber verstehe ihn nicht ganz.
Vielleicht kann mir jemand weiter helfen.
Format der Referenznummer / PrüffzifferCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Function pz10(kto) On Error GoTo Err_pz10 Dim lg As String Dim pos As String Dim k As Integer Const zr_post As String = "0946827135094682713" If IsNumeric(kto) Then I = 0 lg = Len(kto) For J = 1 To lg k = Val(Mid(kto, J, 1)) I = Val(Mid(zr_post, I + k + 1, 1)) Next J pz10 = (10 - I) Mod 10 Else pz10 = "*" End If Exit_pz10: Exit Function Err_pz10: pz10 = "*" Resume Exit_pz10 End Function
6400 8
-
Die hätten dir das lieber als Struktogramm schicken sollen

Welche Prüfziffer ist denn das?
Einzahlungsschein? Postcheckkonti?
Bisschen kurz ^ ^
btw:
on error goto err_pz => try { ... } catch (e as Exception) { ... }
Mid => substr
x mod y => x % y
resume / exit => return
dim lg as String => $lg = "";
Und alle anderen Variablen mit $ versteht sich
So ungefähr kann mans übernehmen. HFGeändert von ZodiacXP (03.10.08 um 13:06 Uhr)
Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
Du sagst das so einfach ein bischen kurz

Mehr habe ich auch nicht.
Die Einzahlungsscheine sehen wiefolgt aus.
6400 <- fortlaufende nummerierung des EZS danach noch eine Prüfziffer die bei 6400 8 ist
bei 6401 ist die Prufziffer 3
Ich glaube bei
Function pz10(kto) muss kto = zb. 6400 sein.
-
AH. Das ist ESR9 von den orangen Scheinen links mittig, oder? Hoffe ich doch

So geht ESR9 :
Man geht von Ü = 0 aus und nutzt folgende Matrix:
Code :1 2 3 4 5 6 7 8 9 10 11 12
0 1 2 3 4 5 6 7 8 9 0 0 9 4 6 8 2 7 1 3 5 0 1 9 4 6 8 2 7 1 3 5 0 9 2 4 6 8 2 7 1 3 5 0 9 8 3 6 8 2 7 1 3 5 0 9 4 7 4 8 2 7 1 3 5 0 9 4 6 6 5 2 7 1 3 5 0 9 4 6 8 5 6 7 1 3 5 0 9 4 6 8 2 4 7 1 3 5 0 9 4 6 8 2 7 3 8 3 5 0 9 4 6 8 2 7 1 2 9 5 0 9 4 6 8 2 7 1 3 1
Am Beispiel 6400:
Ü ist die Zeile beim ersten mal immer 0 (Null). Also auch nur diese Zeile betrachten:
Die erste Ziffer ist die 6, das heißt in der sechsten Spalte gucken und so erhält man die 7 als neues Ü. Das heißt für die nächste Ziffer die Zeile 7 angucken:Code :1 2 3
0 1 2 3 4 5 6 7 8 9 0 0 9 4 6 8 2 7 1 3 5 0
und da unsere nächste Ziffer 4 ist ergibt sich dadraus Ü = 9Code :1 2 3
0 1 2 3 4 5 6 7 8 9 7 1 3 5 0 9 4 6 8 2 7 3
also auf zur neunten Zeile:
Nun die dritte Ziffer von 6400 (eine 0 - Null) und daraus ergibt sich Ü = 5Code :1 2 3
0 1 2 3 4 5 6 7 8 9 9 5 0 9 4 6 8 2 7 1 3 1
Heißt weiter zur fünften Zeile:
Als nächste Ziffer von 6400 kommt wieder eine Null womit sich hier Ü = 2 ergibt.Code :1 2 3
0 1 2 3 4 5 6 7 8 9 5 2 7 1 3 5 0 9 4 6 8 5
Wäre unsere Zahl 6401 dann wäre Ü = 7
Nun zieht man von 10 das Ü ab...
für 6400 wäre das: 10 - 2 = 8
für 6401 wäre das: 10 - 7 = 3
Nachvollziehbar?
So funktioniert das.Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
Danke für die Anleitung.
Aber Irgendwie stehe ich auf dem Schlauch, ich schnall es nicht wirklich.
Werde mir das mal genauer zu gemüte führen müssen
Aber Danke trozdem.
-
aha....
dann ist 6402 10-1 = 9
und 6403 = 10-3 = 7
oder?
und nun das ganze noch in PHP
Geändert von crashx (03.10.08 um 17:36 Uhr)
-
Genau. Das System hast verstanden.
Und der passende Code dazu wurde dir ja gegeben. Mit meinen Hinweisen ganz am Anfang kann man das fast schon 1:1 übernehmen, was dir geschickt wurde.Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
Ich habe es noch nicht ganz begriffen.
Hier mal mein ansatz, vielleicht hat jemand eine Idee.
PHP-Code:<?PHP
function pz10($kto){
$zr_post = 0946827135094682713;
if(is_integer($kto)){
$i = 0;
$lg = strlen($kto);
for($j = 1; $j > $lg; $j++){
$k = Val(Mid($kto, $j, 1)); // Das verstehe ich nicht
$i = Val(Mid($zr_post, $i + $k + 1, 1)); // und das hier auch nicht
}
$pz10 = 10 - $i;
}else{
$pz10 = "*";
}
}
?>
-
09.10.08 16:06 #9
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
die Funktionen "Val" und "Mid" gibt es in PHP nicht. ZodiacXP hat Dir die entsprechenden Funktionen doch schon gepostet:
Mid: substr() (darauf achten, dass in PHP der Index bei 0 beginnt)
Val: Castet in einen numerischen Wert, hier würde ich intval() nehmen
Außerdem hast Du das modulo nach der Schleife vergessen. Der Operator dazu ist in PHP "%".
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
Da ich die ganze funktion nicht ganz verstehe, habe ich versucht diese zu Interpretieren so wie ich das gefühl habe es könnte gehen.
Ich kann aber das ganze nicht richtig nachvollziehen bzw. das in PHP umsetzen.
Das grundprinzip habe ich schon verstanden aber meine beschränkte Logik lässt es mich nicht umsetzen
-
09.10.08 23:36 #11
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
ohne Gewähr:
LGPHP-Code:<?PHP
function pz10($kto){
$zr_post = 0946827135094682713;
if(is_integer($kto)){
$i = 0;
$lg = strlen($kto);
for($j = 0; $j < $lg; $j++){
$k = intval(substr($kto, $j, 1));
$i = intval(substr($zr_post, $i + $k, 1));
}
$pz10 = (10 - $i) % 10;
}else{
$pz10 = "*";
}
}
?>Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
Nach dem ich das ganze kommplet selbst erstellt habe, verstand ich die Logik welche dahinter steckt und es Funktioniert

is_integer musste ich durch is_numeric() ersetzen und intval() kann ich weglassen weil wenn kein is_numeric() gehts ja nicht.
Der String $post muss ein String in der Form wie in der Funktion sein.
Fragt mich nicht wieso, ich weiss das es so geht, also ausprobieren
PS: Vielleicht findet jemand ausbau und sicherheits prüfungs erweiterungen zu der FunktionPHP-Code:<?PHP
function post($kto){
$post = '0946827135094682713';
if(is_numeric($kto)){
for($i = 0; $i < strlen($kto); $i++){
$x = substr($kto, $i, 1);
$y = substr($post, $y+$x, 1);
}
$p = (10 - $y) % 10;
}else{
$p = '*';
}
echo $kto.' <b>'.$p.'</b>';
}
print post('6403');
?>
wäre für tipp's dankbar.
Ähnliche Themen
-
Hilfe... ik berechnung mit vier beinen
Von siggi33 im Forum 3D Studio MaxAntworten: 0Letzter Beitrag: 21.12.10, 03:14 -
Hilfe bei einem Algorithmus
Von zunamy im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 18Letzter Beitrag: 03.06.10, 13:11 -
Hilfe bei Berechnung der Entfernung
Von tatjana123 im Forum PHPAntworten: 2Letzter Beitrag: 08.09.08, 12:21 -
Hilfe bei Formular Berechnung (Edelmetallberechnung)
Von Cusco im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 30.11.05, 22:18 -
Algorithmus zur Berechnung von BSplines
Von Kona im Forum JavaAntworten: 2Letzter Beitrag: 26.06.05, 15:30





Zitieren
Login





