Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Kneos
    Registrato dal
    Aug 2002
    Messaggi
    128

    Generatore di codici univoci

    Salve a tutto il forum,
    mi e stato richiesto di fornire dei codici generati da script php che abbiano garanzia di univocità per almeno 5 anni.
    Qualcuno sa dirmi o fornirmi uno script che generi tali codici con la garanzia richiesta?

    Grazie a tutti in anticipo come al solito per la vostra disponibilità

  2. #2
    quanti ne devi generare ? :master:


    cmq se hai una tabella con questi codici ti basta prendere i dati e nella funzione di rilascio nuovo codice verifichi che non sia esistente ... in caso sia presente ne crei un altro, altrimenti lo metti in database ... questo ti garantisce univocita' per decenni ... a livello teorico, poi dipende dal traffico dei codici ....


    cmq sia:

    function getCode( &$ar ) {
    if( in_Array( ( $c = &md5( microtime() ) ), $ar ) == true ) {
    return getCode( $ar );
    }
    return $c;
    }


    dove $ar sara' l' array contenente tutti i codici gia' assegnati, in questo caso alfanumerici da 32 di lunghezza ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di Kneos
    Registrato dal
    Aug 2002
    Messaggi
    128
    Per generare codici random di solito uso questa funziona che va benissimo ma il mio dubbio è che per come è fatta non garantisca l'univocità per almeno 5 anni. Non c'è db dietro il codice viene generato ed inviato, nessuna memorizzazione in database.


    function CreateCode($Length,$Elements)
    { mt_srand((double)microtime()*1000000);
    $sCode=""; for($i=0;$i<$Length;$i++)
    $sCode .= $Elements[
    mt_rand(0,strlen($Elements)-1) ];
    return $sCode;
    }

    //Richiamo della funzione
    echo(CreateCode(10,"1Q2w3E[4r5€T6y7U8i9O!0pAsDf#GhJ]kL"));

    Se qualcuno ha modo di capire quanto questa funzione possa garantire o no unicità fatemelo sapere, grazie!!

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    e con la funzione uniqid ?

  5. #5
    Utente di HTML.it L'avatar di Kneos
    Registrato dal
    Aug 2002
    Messaggi
    128
    Non la conoscevo, se tu hai avuto modo di usarla e capire come si comporta, saresti in grado di dirmi se risolve il mio problema oppure no?

    Grazie

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Originariamente inviato da Kneos
    Non la conoscevo, se tu hai avuto modo di usarla e capire come si comporta, saresti in grado di dirmi se risolve il mio problema oppure no?

    Grazie
    Non saprei dire.

  7. #7
    il fatto e' che questa validita' per 5 anni ha dell' assurdo, o hai una serie di codici che devono essere validi per 5 anni e non duplicati ( ma confrontabili ) oppure l' unico codice univoco che mi viene in mente e' il time() , proprio da 10 per l' appunto ... ma se devi generare questi codici , o anche fosse solo 2, nello stesso momento il discorso non varrebbe piu' ...


    mi diresti di preciso cosa devi fare ?

    se il db non va , perche' almeno non usare un file di testo serializzato e compresso ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di Kneos
    Registrato dal
    Aug 2002
    Messaggi
    128
    L'unicità di 5 anni è richiesta da una societa di servizi bancari per pagamenti con carta di credito. MI viene richeisto di fornire tra i vari dati che devono passare dal sito negozio al sito società di servizi bancari per effettare la transazione, un,cito testualmente, "Identificativo univoco dell’ordine: deve essere un codice alfanumerico lungo al massimo 50 caratteri. La sua univocità
    deve essere garantita per almeno 5 anni."


    Ora a meno che io abbia interpretato male la specifica mi richiedono che in nessun caso nell'arco di 5 anni debba essere passato un codice che è gia passato come proveniente dal sito negozio in questione.

    Riguardo la funziona uniqid il manuale mi suggerisce di usarla in questo modo per garantire l'unicità:

    $pippo = md5(uniqid(mt_rand(), true));

    Continuo a non avere certezza che sia sufficiente.
    Probabilmente a questo punto userò il db per memorizzare i codici gia utilizzati. che ne pensate?

  9. #9
    Utente di HTML.it L'avatar di Kneos
    Registrato dal
    Aug 2002
    Messaggi
    128
    P.S. riguardo la funzione CreateCode che ho postato che usa microtime come seme, secondo me dovrebbe garantire l'unicità a meno che due pesone nello stesso microsecondo facciano la stessa operazione.

    Sbaglio?

  10. #10
    un esempio su file di testo:

    codice:
    function randomString($tot, $tp=0) {
    	// andr3a
    	srand((double)microtime()*1234567);
    	$a = Array();
    	for($i=0;$i<26;$i++) {
    		$a[$i] = chr($i+97);
    	}
    	if($tp!=0) {
    		array_push($a,'1','2','3','4','5','6','7','8','9','0');
    	}
    	$d = count($a)-1;
    	$st = '';
    	for($i=0; $i<$tot; $i++) {
    		$n = rand(0,$d);
    		$st .= rand(0,1) == 0 ? $a[$n] : strtoupper($a[$n]);
    	}
    	return $st;
    	
    }
    function getUniqueValue( $file ) {
    	if( file_exists( $file ) ) {
    		if( @$ar = &file_get_contents( $file ) ) {
    			$ar = &unserialize( $ar );
    		}
    		else {
    			$ar = Array();
    		}
    		while( true ) {
    		        if( in_Array( ( $uc = &randomString( 50, 1 ) ), $ar ) == false ) {
    				return $uc;
    			}
    		}
    	}
    	return false;
    }
    function setUniqueValue( $file, $value ) {
    	if( file_exists( $file ) ) {
    	        if( @$ar = &file_get_contents( $file ) ) {
    			$ar = &unserialize( $ar );
    		}
    		else {
    			$ar = Array();
    		}
    		if( @$fp = &fopen( $file, 'w+' ) ) {
    		        array_push( $ar, $value );
    			fwrite( $fp, serialize( $ar ) );
    			fclose( $fp );
    			return true;
    		}
    	}
    	return false;
    }
    
    $uniquecode = &getUniqueValue( 'pippo.txt' );
    echo $uniquecode;
    if( setUniqueValue( 'pippo.txt', $uniquecode ) )  {
    	echo '
    operazione avvenuta con successo';
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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 © 2024 vBulletin Solutions, Inc. All rights reserved.