Newsgroup: it.comp.www.php
Titolo: Generatore di codici

Salve a tutto il ng, mi viene richiesto, per applicazione web di tipo pos 
vistuale con cc, di generare un codice ordine tale che, cito testualmente, 
"La sua univocità deve essere garantita per almeno 5 anni". Qualcuno ha 
qualche suggerimento da darmi per poter garantire l'univocità per il periodo 
indicato?
Grazie a tutti in anticipo
Andrea 

 l'univocit` per il periodo indicato?
Non e' sufficiente che salvi i valori precedenti e verifichi ogni volte
che ne generi uno nuovo?
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

Andrea wrote:

non credo dipenda dal periodo ma dal numero massimo di ordini nel detto
periodo..
5 anni * massimo 100 ordini al giorno =
= ((5 * 365) + 2) * 100 =
= 182200
che corrisponde ad un intero di 18 bit se non sbaglio..
-- 
www.iuz-lab.info

 indicato?
Perché non metti un numero sequenziale (1, 2, 3...) magari anche 
criptato in qualche modo? Se ti basta che sia univoco (non ti importa 
cioè di risalire dal codice al numero) potresti criptarlo con md5 o 
sha1, e per rendere più complessa l'apertura del codice potresti 
associarlo ad una qualche stringa
$codice = md5("stringa_di_testo_abbastanza_lunga".$numero_sequenziale);

 indicato?
parti da 1, e conti :)
ciao,
--
oggei

indicato?
Il problema è che nons ai qunati numeri ti serviranno giusto? INoltre
non indichi se il codice deve avere date caratteristiche, ad esempio
uan lunghezza minima, se deve codificare delle informazioni o
costituire solo un codice univoco qualsiasi.
Se così fosse parti da 1 e conti se hai bisogno di un numero di 10
cifre, parti da 10.000.000.000 e conti, se il numeoro da generare non
deve essere sequenziale, puoi sempre frne l'md5, e volendo potresti
generarti una tabella di 10.000 numeri che peschi casualmente
eliminadoli via via, es. generi i numeri da 10.000.000.000 a
10.000.010.000 e li memorizzi pescandoli casualmente quando li hai
usati al 90% riempi di nuovo la tabella con altri 9000 numeri e
ricominci a pescarli a caso e così via.
Se il codice deve essere alfanumerico puoi generarlo usando una base
diversa da quella decimale ad esempio usando numeri e lettere
minuscole hai una base 36, ancora pià ampia se ggiungi le llettere
maiuscole. questa già ti danno basi per codici da 10 a 15 cifre
generano volumi enormi di codici univoci, tali per cui priam di
esaurili tutti pssano oltre i 5 anni richiesti.
Ma dalle info che dai è difficile darti una soluzione univoca.
-- 
Stefano Aglietti - StallonIt on IRCnet - ICQ#: 2078431
Email: 
st...@40annibuttati.it
 
ste...@people.it
Sites: 
http://www.40annibuttati.it
 
http://www.wordpress-it.it

 periodo indicato?
Io farei, data, ora, minuto secondo più una lettera a caso, verificando che 
lo stesso non esista.
Mi sembra difficile che si generino 26 codici nello stesso secondo.
Se invece potrebbe verificarsi, allora usi due lettere e si moltiplica * 26 
la possibilità di codici generati in un secondo.
Dipende da chi li genera, o se si generano in automatico.
Così facendo comunque riesci sempre a risalire al periodo, già da codice... 

Rispondo a tutti solo ora per problemi con la posta.
Premessa, la generazione di un codice unico è richiesta da Bankpass che si 
occupa di fornire servizio di pos virtuale e non da spiegazioni ulteriori 
sulla manualistica a riguardo. Per quanto riguarda le transazioni 
considerando il tipo di attività che offre il pagamento online (il mio 
cliente) credo che avrà assai poche transazioni nel periodo di tempo. Magari 
50 al mese ma secondo me saranno di meno quindi non credo di avere il 
problema di dover generare 100 codici al giorno o più, magari 1 o 2, magari 
5 ma non credo di più.
Rispondo alle varie graditissime soluzioni:
1) Non ho a disposzione un db mysql o pgsql cha sia omeglio c'e ma non posso 
metterci mano per ora quindi facciamo finta che non ci sia, effettivamente 
quella del db era una soluzione che avevo già vagliato e che di solito uso 
in questi casi così ho la certezza di avere cod ordini unici.
2) Quella di salvare i valori precedenti non è male ma il problema è dove 
salvarli e come controllare che un codice appena generato non esista già 
senza un db?
3) Potrei sapere di più su uniqid()? Cosa fa e come si usa?
4) Potrei avere un esempio di data,ora, minuto + lettera? Grazie Federico
Se dimentico qualcuno mi scuso.....
Aspetto suggerimenti
Grazie a tutti ancora