Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Codici casuali lettere e numeri

    Vi posto il codice, poi le due domandine.....

    codice:
    Dim i
    i=1
    For i=1 to 1000
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    a = chr(n)
    anmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    b = chr(n)
    bnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    c = chr(n)
    cnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    d = chr(n)
    dnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    e = chr(n)
    enmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    f = chr(n)
    fnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    g = chr(n)
    gnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    h = chr(n)
    hnmro = n
    
    do
    Randomize
    n = int(rnd * 75) + 48
    loop until ((n >= 48) AND (N <= 57)) OR ((N >= 97) AND (N <= 122))
    j = chr(n)
    jnmro = n
    
    contr1=int((anmro+dnmro+gnmro)/3)
    contrcar1=97
    for ciclo1=0 to contr1
    if contrcar1>121 then
    contrcar1=97
    end if
    contrcar1=contrcar1+1
    next
    contrcar1=chr(contrcar1)
    
    contr2=int((bnmro+enmro+hnmro)/3)
    contrcar2=97
    for ciclo2=0 to contr2
    if contrcar2>121 then
    contrcar2=97
    end if
    contrcar2=contrcar2+1
    next
    contrcar2=chr(contrcar2)
    
    contr3=int((cnmro+fnmro+jnmro)/3)
    contrcar3=97
    for ciclo3=0 to contr3
    if contrcar3>121 then
    contrcar3=97
    end if
    contrcar3=contrcar3+1
    next
    contrcar3=chr(contrcar3)
    
    response.write(a & b & c & d & e & f & g & h & j & contrcar1 & contrcar2 & contrcar3 & "
    ")
    Next
    Domanda/osservazione num.1:
    Credo di averlo scritto un po' cervellotico, si può snellire, mantenendo comunque le stesse caratteristiche? (devo comunque tenere separati i valori delle singole cifre, riconoscendole come a,b,c,d, ecc., dite che mi converrebbe fare uno split? Però non sono molto brava in questo!!!!)

    Domanda/osservazione num.2:
    Ho provato a generare questi 1000 codici, ma nonostante la statistica mi dica che con 9 cifre casuali ed un range di 37 posizioni (lettere minuscole + numeri) io abbia 129.961.739.795.077 combinazioni possibili (37 alla 9^, giusto?), sono usciti 2 codici uguali!!!!!!
    C'è qualcosa di sbagliato nel mio codice? C'è un modo per evitarlo? Considerate che probabilmente di codici dovro' generarne 500.000!!!!
    VVoVe:

    Grasssss'
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  2. #2
    Beh?
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  3. #3
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    così dovrebbe andare
    codice:
    dim arrCaratteri(8)
    dim arrNumeri(8)
    dim arrContr(2)
    dim strCodice
    dim strTuttiCodici
    strTuttiCodici = "|"
    for x = 1 to 1000
    	Randomize(timer)
    	strCodice = ""
    	for i = 0 to 8
    		intAppoRandom= int(rnd * 36) + 48
    		if intAppoRandom <= 57 then
    		arrCaratteri(i)=(Chr(intAppoRandom))
    		arrNumeri(i)= intAppoRandom
    		else
    		arrCaratteri(i)=(Chr(intAppoRandom+39))
    		arrNumeri(i)= intAppoRandom+39
    		end if
    	next
    	for i = 0 to 2
    		contr1=int((arrNumeri(i)+ arrNumeri(i+3)+ arrNumeri(i+6))/3)
    		contrcar1=97
    		for ciclo1=0 to contr1
    			if contrcar1>121 then
    			contrcar1=97
    			end if
    			contrcar1=contrcar1+1
    		next
    		arrContr(i)=chr(contrcar1)
    	next
    	for i = 0 to 8
    		strCodice = strCodice & arrCaratteri(i)
    	next 
    	for i = 0 to 2
    		strCodice = strCodice & arrContr(i)
    	next 
    	if  (InStr(1,strTuttiCodici,"|"& strCodice & "|")) > 0 then
    		i = i-1
    	else
    		strTuttiCodici = strTuttiCodici & strCodice & "|"
    	end if
    	
    	Response.Write(strCodice & "
    ")
    	
    next
    Forza la magica ROMA

  4. #4
    OH MIO DIO!
    Ma tu sei un mito.....!
    Il codice funziona (c'era solo una parentesi migrata a capo).
    Ora me lo sto studiando per capire tutto tutto tutto.
    Così a prima vista una domanda mi sorge spontanea...
    Immagino che la certezza della non ripetizione dipenda da questa riga
    codice:
    Randomize(timer)
    Quindi c'è differenza dalla mia che era semplicemente
    codice:
    Randomize
    Giusto?

    Se ho altre perplessità o curiosità posso chiedere?
    Comunque GRAZIE TANTISSIMOOOOO!
    Tanti baci, vado a studiare.
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  5. #5
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    Randomize(timer)
    dovrebbe aumentare diciamo la casualità (anche se è sempre frutto diun calcolo matematico)

    basando il calcolo della randomizzazione sui millisecondi

    ma un duplicato può sempre capitare
    e per evitare duplicati ho messo questo controllo
    codice:
    if  (InStr(1,strTuttiCodici,"|"& strCodice & "|")) > 0 then
    		i = i-1
    	else
    		strTuttiCodici = strTuttiCodici & strCodice & "|"
    	end if
    comunque per 500.000 codici credo che possa andare in timeout


    per le perplessità chiedi pure
    Forza la magica ROMA

  6. #6
    E c'è modo di nn mandarlo in timeout?
    Devo aumentare i tempi su IIS (il codice gira in locale)?
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  7. #7
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    per prima cosa
    se lo devi far girare solo in locale
    puoi usare visual basic
    al posto di asp

    e poi potresti provare a generae tipo 10000 codici
    alla volta


    ma che ci devi fare poi con 500000 codici ?
    Forza la magica ROMA

  8. #8
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    il timeout lo puoi aumentare
    varaando il
    Server.ScriptTimeout
    Forza la magica ROMA

  9. #9
    Sai che ci avevo pensato al VB, ma sono ancora troppo inesperta in questo campo....
    Non me la sono sentita.........! :rollo:

    Dimmi se sbaglio, se genero 10.000 codici alla volta non c'è il rischio di una ripetizione?
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  10. #10
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    nei secondi 10000 ci potrebbero essere codici del primo
    allora per esempio nel secondo giro invece di inizializzare la variabile strTuttiCodici a "|"
    la potresti inizializzare con i primi codici
    praticamente con i valori restituiti dala prima esecuzione
    e così via
    Forza la magica ROMA

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.