PHP: Ako vygenerovať náhodný, jedinečný alfanumerický reťazec?

Ako by bolo možné vygenerovať náhodný, jedinečný reťazec pomocou čísel a písmen na použitie v overovacom prepojení? Ako keď si vytvoríte účet na webovej lokalite a pošle vám e-mail s odkazom, na ktorý musíte kliknúť, aby ste overili svoj účet... áno... jeden z nich.

Ako môžem takýto odkaz vygenerovať pomocou PHP?

Aktualizácia: Práve som si spomenul na uniqid(). Je to'funkcia PHP, ktorá generuje jedinečný identifikátor na základe aktuálneho času v mikrosekundách. Myslím, že ju budem'používať.

Riešenie

Bezpečnostné upozornenie: Toto riešenie by sa nemalo používať v situáciách, keď kvalita náhodnosti môže ovplyvniť bezpečnosť aplikácie. Najmä rand() a uniqid() nie sú kryptograficky bezpečné generátory náhodných čísel. Bezpečnú alternatívu nájdete v Scottovej odpovedi.

Ak nepotrebujete, aby boli v priebehu času absolútne jedinečné:

md5(uniqid(rand(), true))

V opačnom prípade (za predpokladu, že ste už pre svojho používateľa určili jedinečné prihlasovacie meno):

md5(uniqid($your_user_login, true))
Komentáre (6)

Táto funkcia vygeneruje náhodný kľúč pomocou čísel a písmen:

function random_string($length) {
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));

    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }

    return $key;
}

echo random_string(50);

Príklad výstupu:

zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8
Komentáre (2)
  1. Vygenerujte náhodné číslo pomocou obľúbeného náhodného čísla generátora .
  2. Vynásobte a vydeľte ho aby ste získali číslo zodpovedajúce číslu znakov v abecede vášho kódu
  3. Získajte položku s týmto indexom v vašej kódovej abecedy.
  4. Opakujte postup od bodu 1), kým nezískate dĺžku, ktorú ste chcete .

Napr. (v pseudokóde)

int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough
Komentáre (1)