tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
564
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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.

    Code :
    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
    Format der Referenznummer / Prüffziffer
    6400 8
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    1.854
    Blog-Einträge
    2
    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. HF
    Geä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)

  3. #3
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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.
     

  4. #4
    Registriert seit
    Mar 2004
    Beiträge
    1.854
    Blog-Einträge
    2
    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:
    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
    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
     
    7       1   3   5   0   9   4   6   8   2   7   3
    und da unsere nächste Ziffer 4 ist ergibt sich dadraus Ü = 9
    also auf zur neunten Zeile:

    Code :
    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
    Nun die dritte Ziffer von 6400 (eine 0 - Null) und daraus ergibt sich Ü = 5
    Heißt weiter zur fünften Zeile:

    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
    Als nächste Ziffer von 6400 kommt wieder eine Null womit sich hier Ü = 2 ergibt.
    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)

  5. #5
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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.
     

  6. #6
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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)
     

  7. #7
    Registriert seit
    Mar 2004
    Beiträge
    1.854
    Blog-Einträge
    2
    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)

  8. #8
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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$j1)); // Das verstehe ich nicht
          
    $i Val(Mid($zr_post$i $k 11));  // und das hier auch nicht
        
    }    
        
    $pz10 10 $i;
      }else{
        
    $pz10 "*";
      }
    }
    ?>
     

  9. #9
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    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 "%".

    LG
     
    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.

  10. #10
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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
     

  11. #11
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    ohne Gewähr:
    PHP-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$j1));
          
    $i intval(substr($zr_post$i $k1));
        }    
        
    $pz10 = (10 $i) % 10;
      }else{
        
    $pz10 "*";
      }
    }
    ?>
    LG
     
    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.

  12. #12
    Avatar von crashx
    crashx crashx ist offline Mitglied Brokat
    Registriert seit
    Sep 2005
    Ort
    Schweiz
    Beiträge
    280
    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

    PHP-Code:
    <?PHP
    function post($kto){
      
    $post '0946827135094682713';

      if(
    is_numeric($kto)){
        for(
    $i 0$i strlen($kto); $i++){
          
    $x substr($kto$i1);
          
    $y substr($post$y+$x1);
        }
        
    $p = (10 $y) % 10;
      }else{
      
    $p '*';
      }
      
      echo 
    $kto.'&nbsp;<b>'.$p.'</b>';
    }
    print 
    post('6403');
    ?>
    PS: Vielleicht findet jemand ausbau und sicherheits prüfungs erweiterungen zu der Funktion wäre für tipp's dankbar.
     

Ähnliche Themen

  1. Hilfe... ik berechnung mit vier beinen
    Von siggi33 im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 21.12.10, 03:14
  2. Hilfe bei einem Algorithmus
    Von zunamy im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 18
    Letzter Beitrag: 03.06.10, 13:11
  3. Hilfe bei Berechnung der Entfernung
    Von tatjana123 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 08.09.08, 12:21
  4. Hilfe bei Formular Berechnung (Edelmetallberechnung)
    Von Cusco im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 30.11.05, 22:18
  5. Antworten: 2
    Letzter Beitrag: 26.06.05, 15:30