+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

generazione codice casuale univoco

  1. #1
    simonec non è in linea Novello
    Ciao a tutti..
    problemone.. questo codice mi sta facendo dannare.
    chiedo ad un esperto che magari, leggendo il tutto, scorge un errore.

    con questa funzione viene generato un codice random che poi memorizzo in un database; per come è creato dovrebbero esserci quasi infinite probabilità che NON venga generato un codice uguale ad uno generato in precedenza ma così non è ..

    sfiga vuole che ogni tanto viene generato un codice uguale e mi manda in crisi il sistema quindi ho creato un ciclo che va a controllare che all'interno del DB non vi sia un codice uguale e se per caso vi fosse ricomincia da capo.

    mi credete se vi dico che raramente capita che il ciclo salti?
    raramente viene ugualmente generato un codice preesistente nonostante vi sia anche il ciclo di controllo del DB.

    qualcuno in grado di aiutarmi?
    grazie milleeeeeeeeee



    FUNCTION GetRandomCode(randomcode,codelength,numberofcombin ations)
    'Number of characters in the array below
    codecharacters = 35
    'Array of characters being used for the random code
    codearray = Array("a","b","c","d","e","f","g","h","i","j","k", "l", _
    "m","n","o","p","q","r","s","t","u","v","w","x ", _
    "y","z","1","2","3","4","5","6","7","8","9")
    'Generates one random character until it reaches code length
    FOR x = 1 TO codelength
    RANDOMIZE
    'Gets a random number based on the value in the codecharacters variable
    thiscode = (Int(((codecharacters - 1) * Rnd) + 1))
    'builds the code on top of itself until complete by selecting the
    'character from the array based on the random number generated above
    totalcode = totalcode & codearray(thiscode)

    Set DB3Rs = server.CreateObject("ADODB.Recordset")
    Set DB3Rs.ActiveConnection = conn

    DB3Rs.Open "SELECT * FROM carrello_tab where numero_ordine='" & totalcode & "'", conn, adopenkeyset, adlockreadonly

    if DB3Rs.EOF then
    totalcode = totalcode
    DB3Rs.Close
    else
    CALL GetRandomCode(randomcode,9,numberofcombinations)
    DB3Rs.Close
    end if
    'This is only an extra thing to tell you how many combinations
    'there are for the code length specified. You may get scientific
    'notation to describe the length so, just take it that is damn near
    'impossible to guess the code.
    IF numberofcombinations = "" THEN numberofcombinations = 1
    numberofcombinations = numberofcombinations * codecharacters
    NEXT
    'Random code that is returned after codelength has been fulfilled
    randomcode = totalcode
    END FUNCTION
    'The following line calls (runs) the above script. First variable can be left
    'as is but you can change the value below to any number to generate a code of
    'that length. 3 returns a three character random code, 9 returns a nine
    'character random code... and so on!
    CALL GetRandomCode(randomcode,9,numberofcombinations)
    'You can now use the code for whatever purpose e.g. order number, random password,
    'unique id, etc, etc.
    'Response.Write(randomcode)
    'This is only an extra thing to tell you how many combinations there are to the code length.
    'Response.Write("<br><br>Total combinations for this code length: " & FormatNumber(numberofcombinations,0))
    sNumero_ordine=UCASE(randomcode)

  2. #2
    L'avatar di Jedi-78
    Jedi-78 non è in linea Novello
    Non prendermi per un genio, anzi... parlo da 'old school' e 'out of game', ma il mettere il RANDOMIZE nel ciclo for non fa ripartire il ciclo di creazione? Non dovresti eseguirlo prima dell'inizio del loop, per evitare che vada a ripescare sempre gli stessi numeri?
    ℹ️ Leggi di più su Jedi-78 ...

  3. #3
    simonec non è in linea Novello
    mi sembra che prima venga creato il codice poi e solo successivamente venga inserito il controllo sulla presenza di un numero identico nel DB quindi nel caso di nuovo ricomincia..

    a me sembra corretto.. sto impazzendooooooooooo ;o((

  4. #4
    L'avatar di Jedi-78
    Jedi-78 non è in linea Novello
    Intendo dire che da quanto ricordo l'istruzione RANDOMIZE non deve essere ciclica ma eseguita solo ed esclusivamente una volta sola.

    Spiego meglio:

    'Procedura creazione codice random
    Rndm=""
    randomize
    for x=1 to 30
        Rndm=Rndm & CInt((x * Rnd))
     
    next
    
    Così mi ricordavo venisse usato... e non... così:
    'Procedura creazione codice random
    Rndm=""
    for x=1 to 30
        randomize
        Rndm=Rndm & CInt((x * Rnd))
    next
    
    Perché in questo modo il random viene riazzerato sempre e rischi fortemente che ti riprenda gli stessi valori.

    Ora, come ho detto, sono arrugginito (sono passati 15 anni da quando studiavo e facevo programmazione) ma mi correggi se sbaglio?
    Ultima modifica di Jedi-78; 08-04-2009 10:50 
    ℹ️ Leggi di più su Jedi-78 ...

  5. #5
    simonec non è in linea Novello
    ???
    e quindi come posso risolvere il problema? a volte capita che venga generato un codice identico ad uno precedentemente realizzato nonostante i 78 milioni di probabilità.

    ehm ehm.. ;o(

  6. #6
    L'avatar di Jedi-78
    Jedi-78 non è in linea Novello
    Corretto il messaggio con l'implemento del codice. Prova così...
    ℹ️ Leggi di più su Jedi-78 ...

  7. #7
    simonec non è in linea Novello
    grazie.. ;o))
    ora provo e ti faccio sapere appena ricevo un feedback

  8. #8
    simonec non è in linea Novello
    comunque ciò che ancora non mi torna è per quale ragione ogni tanto saltasse il controllo della preseza di un codice uguale nel DB..
    pensavo che l'errore fosse li e non sulla posizione del randomize sai?

  9. #9
    L'avatar di Jedi-78
    Jedi-78 non è in linea Novello
    ma ha funzionato, spostando il randomize?

    devo essere sincero mi sono bloccato a quello, non ho letto esattamente come funzioni o perché salti... ora vediamo.
    ℹ️ Leggi di più su Jedi-78 ...

  10. #10
    simonec non è in linea Novello
    per ora, in merito alla posizione del randomize, non ci sono differenze .. devo vedere nel tempo se si creano altri "doppioni" o no..

    ;o) se vedi qualche altro errore nell'interrogazione del DB per verificare l'esistenza dei codici dimmelo pure.. ;o) intanto grazie..

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Generazione codice con funzione rnd
    Da enzodb nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 21-05-2017, 13:42
  2. Risposte: 25
    Ultimo Post: 07-04-2015, 21:38
  3. Risolto: Generazione di Codice Univoco
    Da gvigliani nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 09-04-2011, 17:35
  4. Codice Identificativo Univoco
    Da gvigliani nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 15-02-2010, 14:26
  5. Generazione univoco codice per applicazione multiuser
    Da mizamba nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 29-03-2006, 18:28