Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387

    Come scomporre una decina e sommare le due cifre

    Ciao a tutti,
    sto generando in PHP l'algoritmo di Luhn per il Check Digit.

    Mi trovo bloccato su un pezzettino di codice.

    Spiego brevemente (da wikipedia):

    codice:
      1. Partendo da destra e spostandosi verso sinistra, moltiplicare per 2 ogni cifra posta in posizione pari
       2. Laddove la moltiplicazione ha dato un risultato a due cifre, sommare le due cifre per ottenerne una sola (es. 18 = 1+8)
       3. Sommare tutte le cifre, sia quelle che si trovano in posizione pari, sia quelle che si trovano in posizione dispari

    Ho proprio problemi con il passo 2. Vi metto il mio codice:

    codice:
    [...]
    //VIA CON IL CICLO
            for ($i=0; $i<12; $i++)
            {
                    //CONVERTO IL CODICE IN STRINGA ED ESTRAPOLO IN SUCCESSIONE TUTTE LE CIFRE
                    $fattore = substr(strval ( $codice ), $i, 1);
                   
                    //CONTROLLO SE STO PER ELABORARE UNA CIFRA IN POSIZIONE
                    //PARI O DISPARI NEL CODE 128
                    //SE E' DISPARI (DISPARI PERCHE' LA PRIMA CIFRA A DX E' PROPRIO QUELLA CHE CERCO!) LA SOMMO ALL'ADDENDO
                    //SE E' PARI LA MOLTIPLICO PER IL MOLTIPLICATORE
                    //SPECIFICATO IN APERTURA
                    if (($i % 2) == 1)
                        {
                            $fattore = $fattore *$moltiplicatore;
    						
    						// SE IL NUMERO E' UNA DECINA, AD ES. 18, ESTRAPOLO LE DUE CIFRE E LE ADDIZIONO -> 1+8
    						if ($fattore > 9) {
    							
    							for ($y=0; $y<2; $y++) {
    							
    								$cifreSingole = substr(strval ( $fattore ), $y, 1);
    								$newFattore = $cifreSingole + $newFattore;
    								echo "Newfattore: ".$newFattore;
    								
    							}
    							
    						}
    							
    						
                        }
                    $addendo = $addendo + $fattore;
                   
            }
    [...]
    Ma il newFattore mi stampa numeri assurdi sigh....

    Grazie!

  2. #2
    prova a confrontare con questa soluzione:

    Codice PHP:

    function is_luhn_valid($str) {   
     if (
    strspn($str"0123456789") != strlen($str)) {
           return 
    false
     }    
     
    $map = array(0123456789,       
                        
    0246813579);  
     
    $sum 0;    
     
    $last strlen($str) - 1;   
     for (
    $i 0$i <= $last$i++) {       
     
    $sum += $map[$str[$last $i] + ($i 1) * 10];   
     }    
     return 
    $sum 10 == 0


  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    grazie mille... ma alla fine il "lampo di genio" è arrivato

    codice:
    if ($fattore > 9) {
    	$a = substr(strval ( $fattore ), -1, 1);
    	$b = substr(strval ( $fattore ), -2, 1);
    								
    	$fattore = $a + $b;
    
    }
    grazie cmq per la risposta!

  4. #4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.