Hilfe bei Script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe bei Script

    Hallo Zusammen !

    Ich habe hier im Forum ein Script zur Berechnung einer Prüfziffer gefunden.
    Leider wird mir die falsche Prüfziffer ausgegeben, und ich weiß leider nicht , wie ich es abändern muß.(Absolute Beginner - Newbe - ...)

    Folgendes Szenario :
    Aus einer Tabelle orders_status_history soll aus dem Feld track_num eine 11-Stellige Zahl(Bsp. 17922483457) zzgl. einer Prüfziffer ausgegeben werden.
    Die Prüfziffer errechnet sich wie folgt :
    Alle ungeraden Stellen werden mit 3 multipliziert
    Alle geraden Stellen werden mit 1 multipliziert
    Anschließend werden die Ergebnisse addiert

    Bsp.:
    (1.Stelle) 1 * 3 = 3
    (2.Stelle) 7 * 1 = 7
    (3.Stelle) 9 * 3 = 27
    (4.Stelle) 2 * 1 = 2
    (5.Stelle) 2 * 3 = 6
    (6.Stelle) 4 * 1 = 4
    (7.Stelle) 8 * 3 = 24
    (8.Stelle) 3 * 1 = 3
    (9.Stelle) 4 * 3 = 12
    (10.Stelle) 5 * 1 = 5
    (11.Stelle) 7 * 3 = 21

    Quersumme der Teilergebnisse ist 114
    Die Differenz zur nächsten durch 10 teilbaren Zahl ist 6.
    Prüfziffer = 6

    Auszugebende Zahl ist also 179224834576

    Hier ist das Script aus diesem Forum :
    http://www.php-resource.de/forum/sho...threadid=10863


    <?php
    function cdv10($str)
    {

    if (is_string($str))
    {
    for ($i=0;$i<strlen($str); $i++)
    {
    $out = $out . Ord(substr($str,$i,1));
    }
    }
    else
    $out=$str;

    // is the length odd or even
    if ((int)(strlen($out)/2) == (int)((strlen($out)/2)+0.9))
    $m=0;
    else
    $m=1;

    // sum the values for each digit, take care of values > 9
    for ($i=0;$i<strlen($out); $i++)
    {
    $m=($m==1)?2:1;
    $v=$m*substr($out, $i, 1);
    if ($v>9)
    $v=(substr($v, 0, 1)+substr($v, 1, 1));
    $sum = $sum + $v;
    }

    // what is the check digit??
    $cd=(round($sum/10+0.49)*10) - $sum;

    // return dranhängen!!!
    return $cd;

    }


    echo cdv10(17922483457);
    ?>
    Hier ist noch ein weiteres, mit dem es leider auch nicht funktioniert :
    http://www.php-resource.de/forum/sho...threadid=10880

    <?php
    function Modulo10($strNumber) {
    static $intTabelle=array(0,9,4,6,8,2,7,1,3,5);

    //strNumber darf nur Ziffern zwischen 0 und 9 enthalten! <br>


    for ($intIndex=0; $intIndex<strlen($strNumber); $intIndex++) {
    $intUebertrag = $intTabelle[($intUebertrag + substr($strNumber, $intIndex, 1)) % 10];
    }

    return (10 - $intUebertrag) % 10;
    }


    echo Modulo10("17922483457");

    ?>

    Für Eure Hile wäre ich sehr, sehr dankbar !

    Viele Grüße
    framic

  • #2
    Re: Hilfe bei Script

    Für Eure Hile wäre ich sehr, sehr dankbar !
    wenn ich mir beide verlinkten threads anschaue, sieht es so aus, als ob dort jeweils eine funtkionierende lösung gefunden wurde?

    was geht den nicht?

    btw: poste php-code mal in [php ]-tags ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Hallo derHund,

      uups, das ging aber flott !!!

      Bei beiden scripts erhalte ich die falsche Prüfziffer

      PHP-Code:
      <?php
      function cdv10($str)
      {

      if (
      is_string($str))
      {
      for (
      $i=0;$i<strlen($str); $i++)
      {
      $out $out Ord(substr($str,$i,1));
      }
      }
      else
      $out=$str;

      // is the length odd or even
      if ((int)(strlen($out)/2) == (int)((strlen($out)/2)+0.9))
      $m=0;
      else
      $m=1;

      // sum the values for each digit, take care of values > 9
      for ($i=0;$i<strlen($out); $i++)
      {
      $m=($m==1)?2:1;
      $v=$m*substr($out$i1);
      if (
      $v>9)
      $v=(substr($v01)+substr($v11));
      $sum $sum $v;
      }

      // what is the check digit??
      $cd=(round($sum/10+0.49)*10) - $sum;

      // return dranhängen!!!
      return $cd;

      }


      echo 
      cdv10(17922483457);
      ?>
      PHP-Code:
      <?php
      function Modulo10($strNumber) { 
      static 
      $intTabelle=array(0,9,4,6,8,2,7,1,3,5); 

      //strNumber darf nur Ziffern zwischen 0 und 9 enthalten! <br>


      for ($intIndex=0$intIndex<strlen($strNumber); $intIndex++) { 
      $intUebertrag $intTabelle[($intUebertrag substr($strNumber$intIndex1)) % 10]; 
      }

      return (
      10 $intUebertrag) % 10



      echo 
      Modulo10("17922483457"); 

      ?>
      Wie gesagt :
      Bin KEIN Profi !!! Arbeite nach dem TRY-AND-ERROR Prinzip ;-)
      Wenn Du verstehst was ich m

      Kommentar


      • #4
        hmm,

        PHP-Code:
        function cdv10($str) {
          
        $str = (string)$str;
          
        $sum 0;
          for (
        $i=0$i<strlen($str); $i++) {
            
        $part = (int)$str[$i];
            
        $sum += $part * (($i%2==0) ? 1);
          }
          return 
        10 $sum%10;

        works as desired, mit deinem beispiel ...

        wenn nicht, nen halbes bier hab ich noch, also ca. 30min ^^
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Hoffe , das Bier ist noch viertel voll ...

          Es funktioniert !!! Supi !!!

          Ein kleines fehlerchen hat´s noch

          Bsp 15422894593

          wird 10 als Prüfziffer ausgegeben
          `Sollte jedoch null sein ....

          Kommentar


          • #6
            PHP-Code:
            return (10 $sum%10)%10
            jetzt?

            btw: ich hoffe, du try-st dann auch noch, ...
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              hmm,

              weils so schön ist ...
              PHP-Code:
              function cdv10($str) {
                for (
              $str=(string)$str$sum=0$i=0$i strlen($str); $i++)
                  
              $sum += ((int)$str[$i]) * (($i%2==0) ? 1);
                return (
              10 $sum%10)%10;

              scheint immernoch zu funktionieren, kürzer krieg ichs nicht ^^
              PHP-Code:
              function cdv10($str) {
                for (
              $str=(string)$str$sum=0$i=0$i strlen($str); $sum += ((int)$str[$i]) * (($i%2==0) ? 1), $i++) {}
                return (
              10 $sum%10)%10;

              man kanns auch übertreiben ...
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Danke Danke Danke !!!!!!!!!!


                Echt klasse von Dir - Ich darf dann jetzt noch was try-en !!!

                Auf jeden fall mit weniger errors !

                Hätte das nie und nimmer hingekriegt !!!

                Übrigens :
                Die Bilder von Deinem Hund/Kaninchen : GENIAL !!!!
                Diese HP ist ein Besuch Wert !!!

                Vielen Dank nochmal !
                Gruß framic

                Kommentar


                • #9
                  Die Bilder von Deinem Hund/Kaninchen : GENIAL !!!!
                  danke. gut nacht.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Hallo derHund,

                    kannst Du mir nochmal auf die Sprünge helfen ???

                    Ich raff´s nicht !

                    Wie kann ich denn aus der Funktion eine Variable herausbekommen ?
                    (Too much tries - too much errors ....)

                    Habe hier mal was gebastelt - sieht zwar nicht schön aus - erfüllt aber vielleicht seinen Zweck ...

                    schau mal :
                    PHP-Code:
                    <?php
                    function cdv10($str) {
                      
                    $str = (string)$str;
                      
                    $sum 0;
                      for (
                    $i=0$i<strlen($str); $i++) {
                        
                    $part = (int)$str[$i];
                        
                    $sum += $part * (($i%2==0) ? 1);
                      }
                      return (
                    10 $sum%10)%10;
                    }
                    ?>
                              <?
                    $orders_history_query = tep_db_query("select track_num from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '" . tep_db_input($oID) . "'");
                    while ($orders_history = tep_db_fetch_array($orders_history_query))
                    $track_number = $orders_history['track_num'];
                    $ziffer = "8"; /* <-- Hier sollte das Ergebnis der Berechnung reinkommen */
                    $track_number .= $ziffer;
                      
                     define (__TRACE_ENABLED__, false);
                     define (__DEBUG_ENABLED__, false);
                                                       
                     require("barcode.php");           
                     require("i25object.php");
                                               
                    /* Default value */
                    if (!isset($output))  $output   = "png"; 
                    if (!isset($barcode)) $barcode  = $track_number;
                    if (!isset($type))    $type     = "I25";
                    if (!isset($width))   $width    = "250";
                    if (!isset($height))  $height   = "75";
                    if (!isset($xres))    $xres     = "2";
                    if (!isset($font))    $font     = "1";
                    /*********************************/ 
                                                        
                    if (isset($barcode) && strlen($barcode)>0) {    
                      $style  = BCS_ALIGN_CENTER;                           
                      $style |= ($output  == "png" ) ? BCS_IMAGE_PNG  : 0; 
                      $style |= ($output  == "jpeg") ? BCS_IMAGE_JPEG : 0; 
                      $style |= ($border  == "off"  ) ? BCS_BORDER       : 0; 
                      $style |= ($drawtext== "on"  ) ? BCS_DRAW_TEXT  : 0; 
                      $style |= ($stretchtext== "on" ) ? BCS_STRETCH_TEXT  : 0; 
                      $style |= ($negative== "on"  ) ? BCS_REVERSE_COLOR  : 0; 
                      
                      switch ($type)
                      {
                        case "I25":
                                  $obj = new I25Object(250, 120, $style, $barcode);
                                  break;
                        default:
                                $obj = false;
                      }
                      if ($obj) {
                         if ($obj->DrawObject($xres)) {
                             echo "<table align='center'><tr><td><img src='./image.php?code=".$barcode."&style=".$style."&type=".$type."&width=".$width."&height=".$height."&xres=".$xres."&font=".$font."'></td></tr></table>";
                         } else echo "<table align='center'><tr><td><font color='#FF0000'>".($obj->GetError())."</font></td></tr></table>";
                      }
                    }
                    ?>
                            </span>
                              <span class="smallText">
                    <?php 
                    $orders_history_query 
                    tep_db_query("select track_num from " TABLE_ORDERS_STATUS_HISTORY " where orders_id = '" tep_db_input($oID) . "'");
                    while (
                    $orders_history tep_db_fetch_array($orders_history_query))
                    $track_num $orders_history['track_num'];
                    echo (
                    $track_num);
                    echo 
                    " ";
                    echo 
                    cdv10($track_num);
                    ?>
                    Das wäre glaube ich alles, was zum erstellen meiner eigenen Paketkarten
                    bräuchte.
                    Wäre supernett von Dir ! Danke im voraus !
                    Gruß FraMic

                    Kommentar


                    • #11
                      hmm,

                      Wie kann ich denn aus der Funktion eine Variable herausbekommen ?
                      verstehe nicht, was du hier fragst
                      PHP-Code:
                      $ziffer "8"/* <-- Hier sollte das Ergebnis der Berechnung reinkommen */ 
                      dadrauf bezug nehmend ... ?

                      wenn du eine ausgabe der prüfziffer mittels
                      PHP-Code:
                      echo funktionsaufruf(parameter); 
                      wobei echo die ausgabe erzeugt, erreichst, und
                      PHP-Code:
                      $ziffer 8
                      der variablen einen wert zuweist, wie sollte dann wohl der korrekte syntax lauten, um die rückgabe eine funktion einer variablen zuzuweisen?

                      sorry, aber entweder hab ichs falsch verstanden oder ... http://www.schattenbaum.net soll ganz gut sein.
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        Hallo derHund,
                        danke für Deine superschnellen Antworten.

                        Ich peil das einfach nicht, und
                        mit TRY-AND-ERROR geht´s hier nicht ...

                        Die Zahl "8" habe ich zum testen eingetragen, um mein Script Lokal auszuprobieren.

                        Anstelle der Zahl 8 sollte hier eigentlich das Ergebnis aus der Funktion
                        PHP-Code:
                        <?php 
                        function cdv10($str) {
                          
                        $str = (string)$str;
                          
                        $sum 0;
                          for (
                        $i=0$i<strlen($str); $i++) {
                            
                        $part = (int)$str[$i];
                            
                        $sum += $part * (($i%2==0) ? 1);
                          }
                          return (
                        10 $sum%10)%10;
                        }

                        ?>
                        als Variable eingetragen werden.

                        Die Ausgabe des Ergebnisses erhalte ich ja mit
                        PHP-Code:
                        echo cdv10($track_num); 
                        wobei $track_num die Variable für die Paketnummer ist.

                        Vom Gedankengang her müßte ich ja eigentlich nur die "8" durch
                        cdv10($track_num); ersetzen, aber dann sagt mir mein barcode-script, daß es nur mit Zahlen arbeiten kann !?!

                        Die empfohlene HP ist sehr hilfreich - danke vielmals für den Tip
                        Hingegen ist das Buch php4&mysql für Anfänger sehr verwirrend.

                        Gruß Frank

                        Kommentar


                        • #13
                          OffTopic:
                          Es ist wohl nicht erforderlich, dass du die User per E-Mail auf deinen Thread aufmerksam machst! Das hier ist ein FORUM!

                          Kommentar


                          • #14
                            hhmmmmmmm,

                            ich hab´s ........

                            Danke nochmal für Deine wertvolle Hilfe !

                            Schönen Abend noch !

                            Kommentar


                            • #15
                              gut,

                              dann lösch ich grad geschriebenes ^^
                              Die Zeit hat ihre Kinder längst gefressen

                              Kommentar

                              Lädt...
                              X