Eredmény: 1 - 7 (7) összesen

Téma: CDV kód generálása, hogyan?

  1. #1
    Tag
    Csatlakozott
    07-06-15
    Hozzászólás
    70
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás CDV kód generálása, hogyan?

    Hello,

    Adott egy 9 karakteres számsor, ehhez kellene képezni egy 10. karaktert. Az alábbi algoritmus szerint: balról haladva a számokat felváltva megszorozni hárommal, és eggyel, a szorzatokat összeadni, és egy MOD10es művelettel megkapom a szükséges számot.

    Sajna elképzelésem sincs, hogy milyen irányba induljak...

    Ötlet, tanács?

    Köszi



  2. #2
    Bölcs ARTidas logója
    Csatlakozott
    09-09-15
    Hely
    Budapest
    Hozzászólás
    1.465
    Thanked 1 Time in 1 Post

    Alapbeállítás re: CDV kód generálása, hogyan?

    Valassz programnyelvet... Php, java, javascript, pascal, c, c++, c#, delphi, basic, fortram... Vagy akar adatbazison belul sql el

    Miutan kivalasztottat, johet az algoritmus. Vagy felberelsz valakit ennek a megirasara vagy megtanulod. De ha diy vagy akar excelben is megteheted...

    cheers,



  3. #3
    Tag
    Csatlakozott
    07-06-15
    Hozzászólás
    70
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: CDV kód generálása, hogyan?

    Igen, azért a PHP topikban írtam, mert ezt már eldöntöttem. Illetve, hát nem is én, hanem ebben kell.

    Ott akadtam el, hogy nem tudtam, hogy kezeljem egy szám helyiértékeit (Ezt most sem tudom...). Ezt nem tudtam megoldani, ekkor jött a kérdés. Viszont közben rájöttem, hogy egyszerűen nem számként fogom kezelni, hanem szövegként. Úgyhogy megoldódott.

    Azért köszi a segítséget.



  4. #4
    Bölcs
    Csatlakozott
    09-08-20
    Hozzászólás
    524
    Begyűjtött 47 köszönetet
    39 hozzászólásával

    Alapbeállítás re: CDV kód generálása, hogyan?

    EAN vonalkódok ellenőrző része is így számolandó...

    példaszám: $szamsor=987654321

    Egyszerű a megoldás:
    -substr -rel egyesével kiveszed a számokat, összeadod, és szorzod hárommal
    (9+7+5+3+1)*3

    -substr -rel kiveszed minden második számot, és összeadod
    8+6+4+2

    -a két eredményt összeadod

    -maradék osztás (%)
    $cdv=osszeg % 10

    $egesz=$szamsor.$cdv;


    substr használata:
    http://php.net/manual/en/function.substr.php



  5. #5
    Bölcs benedictus logója
    Csatlakozott
    10-04-23
    Hozzászólás
    1.574
    Begyűjtött 2 köszönetet
    2 hozzászólásával

    Alapbeállítás re: CDV kód generálása, hogyan?

    $cdv=0;
    for(i=9;i;i++){$cdv+=(1+(2*(i%2))*(int) $szamsor/pow(10,$i);}
    $cdv%=10;


    Utoljára módosítva: benedictus által : 2011-02-26 19:13

  6. #6
    Tag
    Csatlakozott
    07-06-15
    Hozzászólás
    70
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: CDV kód generálása, hogyan?

    Köszönöm, végül is megoldódott, lehet, hogy nem a legszebben, de működik. Ilyen lett:

    $CDV=$ragszam[0]*3 + $ragszam[1]*1 + $ragszam[2]*3 + $ragszam[3]*1 + $ragszam[4]*3 + $ragszam[5]*1 + $ragszam[6]*3 + $ragszam[7]*1 + $ragszam[8]*3)%10

    Egyébként ez a postai RAGszám ellenőrző kódja! Sajna lett azóta mégegy gond. Nem szeretem a Postát...

    Ez a leírás:

    Az ellenőrző számjegy - algoritmus rekurzív algoritmus. Az ellenőrzőszám az egész OCR-sorra (ez változó hosszúságú) kiterjedően kerül kiszámításra. Az algoritmus a mezőkkel és helyértékkel végzendő műveleteket balról kiindulva hajtja végre.
    a. Az X-tengelyen találjuk az áthozatokat.
    b. Az Y-tengelyen találjuk a kódoló sor számjegyeit.
    c. Az X- és Y-tengelyek metszéspontjában találjuk az új áthozatot.

    0 1 2 3 4 5 6 7 8 9 CDV
    0 0 9 4 6 8 2 7 1 3 5 09
    1 9 4 6 8 2 7 1 3 5 0 90
    2 4 6 8 2 7 1 3 5 0 9 81
    3 6 8 2 7 1 3 5 0 9 4 72
    4 8 2 7 1 3 5 0 9 4 6 63
    5 2 7 1 3 5 0 9 4 6 8 54
    6 7 1 3 5 0 9 4 6 8 2 45
    7 1 3 5 0 9 4 6 8 2 7 36
    8 3 5 0 9 4 6 8 2 7 1 27
    9 5 0 9 4 6 8 2 7 1 3 18

    Példa: kódolósor kiszámítása 0846255
    1.lépés: áthozat 0, 1.számjeggyel kombinálva (0) kódolósor, 0 áthozatot ad ki
    2.lépés: áthozat 0, 2.számjeggyel kombinálva (8) kódolósor, 3 áthozatot ad ki
    Stb...
    Az utolsó számnál A CDV oszlop száma adja az eredményt!

    Arra gondoltam, hogy a számokat feltöltöm egy tömbbe, valami ciklussal kikeresem az áthozatott, és így végigmegyek rajta. De hogy kapom meg, hogy épp melyik sorba vagyok?

    Sajna nem tanultam programozni, pedig valami alap "algoritmus" órán biztos elhangzott volna...

    Hátha valaki!

    Kösz



  7. #7
    Új tag andras.ori logója
    Csatlakozott
    11-08-11
    Hely
    Budapest, Hungary
    Hozzászólás
    25
    Thanked 2 Times in 1 Post

    Alapbeállítás re: CDV kód generálása, hogyan?

    Szia!

    Hát nem ma tetted fel a kérdést, de én is belefutottam ebbe a postai csekk ellenőrző algoritmusba és gondoltam álljon itt akkor egy megfejtés rá.

    Az eredmény kipróbálható itt: hxxp://oriandras.hu/snippet/sorcdv.php <<< ezt tanulmányozásra le is lehet tölteni

    Első körben létrehozom tömbösítve a számolótáblát:

    PHP kód:
    $kod = array (
            array(
    0,9,4,6,8,2,7,1,3,5),
            array(
    9,4,6,8,2,7,1,3,5,0),
            array(
    4,6,8,2,7,1,3,5,0,9),
            array(
    6,8,2,7,1,3,5,0,9,4),
            array(
    8,2,7,1,3,5,0,9,4,6),
            array(
    2,7,1,3,5,0,9,4,6,8),
            array(
    7,1,3,5,0,9,4,6,8,2),
            array(
    1,3,5,0,9,4,6,8,2,7),
            array(
    3,5,0,9,4,6,8,2,7,1),
            array(
    5,0,9,4,6,8,2,7,1,3)
        );
        
    $kodCDV = array("09","90","81","72","63","54","45","36","27","18"); 
    Bekérem egy űrlapban a számsort, amiből generálni szeretnénk az ellenőrző kódot:

    HTML kód:
    <form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="szamform" name="szamform">
           <p><input type="text" id="szamsor" name="szamsor" value="<?php echo $szamsor;?>"></p>
           <p<input type="submit" name="submit" class="btn bg-red300 text-white" value="Mehet"></p>
    </form>
    Szétkapom a számsort darabjaira és meg is számolom a számjegyeket a továbbiakhoz.

    PHP kód:
    $_POST['szamsor'] = $szamsor;
                    echo 
    "<p class=\"large center\">".$szamsor."</p>";
                    
    $digits = (string)$szamsor;
                    
                    
    $digitsnumber strlen($szamsor);
                    echo 
    "<p>Számjegyek darabszáma: ".$digitsnumber."</p>"

    A következő lépésben elkezdem egymás mellé rendelni soronként a kinyert adatokat. Az első számnál az áthozat értékét kinullázom, a további lépésekben egy kis sessionbe teszem és az viszi lépésről lépésre. Az aktuális számjegyet a szétrobbantott számsor elemeiből szedem vissza.

    PHP kód:
                                    $i=0;
                    echo 
    "<ol>";
                    while (
    $i $digitsnumber) {
                        if (
    $i==0) {
                            
    $szam=$digits[$i];
                            
    $athozat=0;
                            
    $_SESSION['athozat'] = $kod[$athozat][$szam]; 
                        }
                        else {
                            
    $szam=$digits[$i];
                            
    $athozat=$_SESSION['athozat'];
                            
    $_SESSION['athozat'] = $kod[$athozat][$szam]; 
                        }
                        echo 
    "<li>áthozat: ".$_SESSION['athozat']."</li>";
                        
    $i++;
                        }
                    echo 
    "</ol>"
    Amikor a számjegyek darabszámának megfelelő mennyiségű műveletet elvégezte a kód kapok egy utolsó áthozat sessiont, amivel az ellenőrző oszlopból már egyszerűen kinyerhető a keresett szám.

    PHP kód:
    echo "CDV kód: ".$kodCDV[$_SESSION['athozat']]; 
    Lehetett volna elegánsabb is pár helyen, de elvégzi a dolgát és nem akartam vele több időt elvesztegetni. Remélem tudtam segíteni másnak is, mert undorító egy munka volt.



  8. The Following 2 Users Say Thank You to andras.ori For This Useful Post:

    DomainFlotta (2016-05-12), ferrari27 (2016-05-16)

A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •