Generering av tilfeldige tall

PHP:
Generering av tilfeldige tall

Hvordan:

PHP tilbyr flere funksjoner for å generere tilfeldige tall, men de mest brukte er rand(), mt_rand(), og for kryptografiske formål, random_int().

For å generere et enkelt tilfeldig tall mellom 0 og getrandmax() (den største mulige verdien returnert av rand()), kan du bruke:

echo rand();

For et mer spesifikt område, som mellom 1 og 100:

echo rand(1, 100);

Imidlertid er mt_rand() et bedre valg for fart og tilfeldighet:

echo mt_rand(1, 100);

Resultatet for begge kan være noe mellom 1 og 100, avhengig av tilfeldiggjøringen, f.eks., 42.

For kryptografiske eller sikkerhetskontekster, der uforutsigbarhet er avgjørende, er random_int() det foretrukne valget ettersom den genererer kryptografisk sikre pseudo-tilfeldige heltall:

echo random_int(1, 100);

Igjen er resultatet et tilfeldig tall mellom 1 og 100, som 84, men med en sterkere garanti for tilfeldighet.

Dypdykk

rand()-funksjonen har vært til stede i PHP siden de tidlige versjonene, og fungerte som den opprinnelige metoden for å generere tilfeldige tall. Imidlertid er ikke dette det beste valget for applikasjoner som krever en høy grad av tilfeldighet på grunn av dens relativt forutsigbare algoritme.

mt_rand(), introdusert i PHP 4, er basert på Mersenne Twister-algoritmen - langt overlegen i form av hastighet og den tilfeldigheten den kan generere sammenlignet med rand(). Den ble raskt det foretrukne alternativet for de fleste ikke-kryptografiske behov.

For sikkerhetskritiske applikasjoner, ble random_int() introdusert i PHP 7 for å generere kryptografisk sikre pseudo-tilfeldige heltall ved å bruke tilfeldige bytes fra systemets tilfeldige tallgenerator. Det er vesentlig sikrere enn både rand() og mt_rand(), noe som gjør den til det beste valget for å generere token, nøkler eller andre elementer hvor forutsigbarhet kan føre til sikkerhetsrisikoer.

Til tross for disse forbedringene, er det avgjørende å velge riktig funksjon basert på applikasjonens kontekst. For generell bruk, holder mt_rand(), men for alt som kan bli rettet mot eller utnyttet, er random_int() veien å gå, og tilbyr både tilfeldighet og sikkerhet.