Računala Windows Internet

Generirajte nasumične brojeve unutar raspona. PHP aplikacija slučajnih funkcija php najbolji generator slučajnih brojeva

Inicijalizira generator slučajni brojevi... Sintaksa:

Void srand (int seed)

Inicijalizira generator slučajnih brojeva sa sjemenom.

Srand ((dvostruko) mikrovrijeme () * 1000000);
$ random = rand ();
echo $ nasumično;

GETRANDMAX

Vraća najveći mogući slučajni broj. Sintaksa:

Int getrandmax ()

Ova funkcija vraća maksimalnu vrijednost koja se može dobiti pomoću funkcije generiranja slučajnih brojeva rand ().

Obično je to 32767

Generira slučajni broj. Sintaksa:

Int rand (])

Kada se pozove s izbornim min i max parametrima, ova funkcija generira slučajni broj unutar ovih parametara, uključujući. Ako nedostaju min i max parametri, vraća se broj između 0 i RAND_MAX.

Za ispravan rad ovu funkciju, prije nego što je koristite, trebate inicijalizirati generator slučajnih brojeva s funkcijom srand ().

lcg_value ()

LCG generator pseudoslučajnih brojeva (PHP 4, PHP 5)

Opis:

Float lcg_value (void)

lcg_value () vraća pseudo-slučajni broj u rasponu (0, 1). Funkcija kombinira dva generatora s 2 ^ 31 - 85 i 2 ^ 31 - 249 u razdoblju.

mt_getrandmax ()

Prikazuje najveću moguću slučajnu vrijednost (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Int mt_getrandmax (void)

Prikazuje maksimalnu vrijednost koju može vratiti funkcija mt_rand ().

mt_rand ()

Generira najbolju slučajnu vrijednost (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Int mt_rand ()

Mnogi stariji generatori slučajnih brojeva imaju upitne karakteristike i spori su. Prema zadanim postavkama PHP koristi generator slučajnih brojeva funkcije rand (). Funkcija mt_rand () dobra je zamjena. Koristi generator slučajnih brojeva koji je 4 puta brži od rand () i koristi Mersenne Twister.

Pozvan bez opcijskih argumenata min i max, mt_rand () vraća pseudo-slučajnu vrijednost između 0 i RAND_MAX. Ako trebate dobiti, na primjer, nasumične vrijednosti između 5 i 15, uključujući, naći ćete mt_rand (5, 15).

Primjer korištenja mt_rand ()

echo mt_rand (). "\ n";
echo mt_rand (). "\ n";

echo mt_rand (5, 15);
?>

Ovaj primjer će rezultirati nečim poput ovoga:

1604716014
1478613278
6

Komentar

Komentar: Prije 3.0.7, drugi parametar funkcije specificirao je raspon brojeva. Na primjer, da bi se dobili slučajni brojevi između 5 i 15, ove verzije zahtijevaju navođenje funkcije mt_rand (5, 11).

mt_srand ()

Postavlja početnu vrijednost najbolji generator nasumični brojevi (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Void mt_srand ()

Postavlja seed za generator slučajnih brojeva pomoću sjemena. Od PHP 4.2.0, seed je neobavezan i zadane postavke za slučajne vrijednosti su izostavljene.

Primjer korištenja mt_srand ()

// sjeme s mikrosekundama
funkcija make_seed ()
{
popis ($ usec, $ sec) = eksplodirati ("", mikrovrijeme ());
return (float) $ sec + ((float) $ usec * 100000);
}
mt_srand (napravi sjeme ());
$ randval = mt_rand ();
?>

Komentar: Od PHP 4.2.0 više nije potrebno inicijalizirati generator slučajnih brojeva s srand () ili mt_srand (), jer se to sada događa automatski.

Možete koristiti PHP-ovu rand () ili mt_rand () funkciju za generiranje slučajnog broja. Zahtjev za korištenjem slučajnih brojeva često se javlja u praksi za imenovanje varijabli, datoteka, stvaranje ključnih informacija i osiguranje sigurnosti.

Slučajnost i jedinstvenost

PHP-ova random funkcija dolazi u dvije vrste: rand () i mt_rand (). Vjeruje se da je algoritam u prvom slučaju jednostavniji i generira pseudoslučajne brojeve. Druga opcija ima brži algoritam i poznat matematičke karakteristike... U većini slučajeva, kada trebate dobiti nasumični broj, možete koristiti niz PHP nasumičnih poziva i dobiti jedinstvenu kombinaciju brojeva.

Ako za osnovu uzmete brojeve od 1 do 26 ili od 1 do 32 i dobijete ih nasumično, ključne informacije možete oblikovati kao niz latiničnih ili ćiriličnih slova. U ovom slučaju, PHP random je način generiranja niza abecednih informacija, na primjer, za testiranje komunikacijskih kanala ili algoritama.

Slučajni broj rijetko je jedinstven, jer se može pojaviti više puta prema zakonu distribucije slučajne varijable. Ali ako kombiniramo, posebno, statičnost PHP varijabla& Math.random of JavaScript, možete dobiti pravi jedinstveni slučajni broj koji se neće ponavljati tijekom vremena.

Korištenje funkcije vremena

Funkcija vremena, i PHP i JavaScript, omogućuje vam da formirate jedinstvene kombinacije brojeva, rijetko kada se u jednom trenutku može dogoditi dovoljno velik broj događaja i slučajna vrijednostće se ponoviti.

Primjenom PHP-a nasumično u rasponu sekundi ili milisekundi u širokom rasponu mogućih vrijednosti, možete dobiti jedinstvene slučajne kombinacije brojeva ili slova. Što drugo?

Kombinirajući vrijednost funkcije vremena, sekvencijalno rastući broj i PHP slučajni slučaj, ili možete osigurati pouzdanu sigurnost komunikacijskih kanala klijenta i poslužitelja, kreirajte jedinstveni kodovi za varijable, generirati nepredvidive događaje u algoritmima.

PHP generator slučajnih brojeva izvrsno je rješenje za većinu zadataka, posebno kada trebate brzo dobiti visokokvalitetne rezultate uz minimalne troškove. Korištenje funkcija rand () i mt_rand u kombinaciji sa sekvencijalno rastućim nizom brojeva ili vremenskih vrijednosti omogućuje vam da dobijete slučajne brojeve, koji se ponavljaju u vrijednosti i jedinstveni.

Pozdrav svima! U ovom članku ćemo pogledati što je novo za generiranje slučajnih brojeva u PHP 7.1.

Ovo ažuriranje dogodilo se nevidljivo programerima, ali je poboljšalo programski jezik PHP u području generiranja slučajnih brojeva.

Koliko je poznato, u PHP možemo koristiti funkciju rand (min, max) za generiranje slučajnih brojeva:

Echo rand (7, 17);

Ako sada osvježite stranicu, svaki put ćete dobiti novi slučajni broj.

Ali nije sve tako jednostavno kao što se čini. Poanta je da, ovisno o tome za što generirate slučajni broj, funkcija rand () koristi različitim sustavima generacija. Oni. ovisi o sustavu u kojem se koristi. Neki sustavi mogu koristiti slabe metode generiranja, odnosno dobit ćete ne sasvim slučajne brojeve.

V PHP 7.1 ovaj problem je riješen i funkcija je dodana mt_rand ():

Echo mt_rand (7, 17);

Ova značajka radi puno bolje, uključujući sigurnost. Ono što je također važno znati je da ako koristite funkciju rand () v PHP 7.1, tada će se automatski prepisati u mt_rand ()... Oni. rand () sada samo pseudonim za mt_rand ().

Mnoge druge funkcije za dobivanje slučajnih rezultata su poboljšane PHP 7.1... Na primjer, pogledajmo kako možemo dobiti slučajnu vrijednost iz niza:

$ names = ["Ivan", "Aleksandar", "Vasilij"];
echo $ imena;

Oni. sve funkcije poput ove poboljšane su kako bi se proizveli kvalitetniji slučajni brojevi PHP 7.1... Da, ovo ažuriranje je prošlo nezapaženo, ali bez obzira na kojem jeziku pišete, vrlo je važno razumjeti što se događa unutar funkcije i kako se ona ponaša.

A sada preuzimamo gotovu funkciju generiranja lozinke i pišemo skriptu za vraćanje ili stvaranje nove lozinke za korisnike vaše stranice.

Skripta za oporavak lozinke

Kako se obično piše skripta?

Kao i uvijek, izrađuje se shema korak po korak, što moramo učiniti u koracima. Sve se događa u jednoj datoteci, podsjetnik.php

1. Pokrenite skriptu samo ako postoji određena varijabla, na primjer $ akcija;

2. Za početak procesa generiranja lozinke, korisnik navodi adresu e-pošte $ _POST [`ema'l`]; Da biste pojednostavili kod, dodijelite ovu vrijednost varijabli $ email.

3. Provjeravamo uz pomoć regularnih izraza sve znakove kako bi korisnik ispravno naveo adresu e-pošte. Ako nije, prikažite pogrešku, prekinuti skriptu. Ako je sve točno, idemo dalje.

4. Tražimo u bazi podataka, u našem slučaju u tablici korisnika za korisnika sa sljedećim poštanska adresa... Ako ne, izdajemo grešku da u bazi nema takve adrese i prekidamo skriptu.

5. Postoji korisnik s takvom adresom u bazi podataka, samo naprijed i pokrenite funkciju generiranja nove lozinke. Također, na email adresu dobivamo jedinstveni korisnički id iz baze podataka i upisujemo ga u varijablu $ id;

Tehnički, izraz "generator slučajnih brojeva" je apsurdan, budući da sami brojevi nisu slučajni. Na primjer, je li 100 slučajan broj? I 25? Ono što ovaj izraz zapravo znači je da stvara niz brojeva koji se pojavljuju nasumično. Ovo rađa više složeno pitanje: što je niz slučajnih brojeva? Jedini točan odgovor: niz slučajnih brojeva je niz u kojem svi elementi nisu povezani. Ova definicija dovodi do takvog paradoksa da svaki slijed može biti i slučajan i neslučajan, ovisno o tome kako se taj slijed dobiva. Na primjer, sljedeći redak brojeva
1 2 3 4 5 6 7 8 9 0
primljeno je tiskanjem Gornji red tipkovnice po redu, tako da se slijed ne može smatrati nasumično generiranim. Ali što ako dobijete istu konzistenciju vađenjem numeriranih teniskih loptica iz bačve. U ovom slučaju, to je već nasumično generiran slijed. Ovaj primjer pokazuje da slučajnost niza ovisi o tome kako je dobivena, a ne o sebi.

Zapamtite da je slijed brojeva koje generira računalo deterministički: svaki broj osim prvog ovisi o prethodnim brojevima. Tehnički, to znači da samo kvazi-slučajni niz brojeva može generirati računalo, t.j. zapravo, oni nisu istinski nasumični. Međutim, to je dovoljno za većinu zadataka i takvi će se nizovi zbog jednostavnosti zvati slučajni. Jednu vrlo zanimljivu metodu razvio je John von Neumann; često se naziva srednji kvadrat. U ovoj metodi se prethodni slučajni broj kvadrira, a zatim se iz rezultata izdvajaju srednje znamenke. Na primjer, ako kreirate brojeve s tri znamenke, a prethodni broj je bio 121, tada kvadriranje daje 14641. Odabir srednje tri znamenke daje sljedeći slučajni broj 464. Nedostatak ove metode je što ima vrlo kratko razdoblje ponavljanja, tzv. petlja... Iz tog razloga ova metoda se danas ne koristi. Moderne metode generiranje slučajnih brojeva je puno teže.

Slučajni brojevi u PHP-u

PHP ima dvije grupe funkcija slučajnih brojeva. Izvana se mogu razlikovati po prefiksu mt_ za sve funkcije jedne od skupina.

Zastarjele funkcije
Rand. Vraća cijeli broj od nule do RAND_MAX (što je 32767). Može imati dva neobavezna cjelobrojna parametra - ako su specificirani, onda se generira slučajni broj od prvog do drugog parametra.

Echo rand (); eho rand (1.100); // Dajte nasumični broj od 1 do 100

Srand. Određuje slijed slučajnih brojeva koje proizvodi rand funkcija. Ima cjelobrojni parametar - za različite vrijednosti ovog parametra, rand će proizvesti različite nizove brojeva. Sranda je potrebno nazvati samo jednom prije svih poziva na rand. Primjer upotrebe:

Srand (1288); // Inicijaliziraj generator slučajnih brojeva za ($ i = 0; $ i<5;$i++){ echo rand(); echo "
"; }

Pažnja! Od PHP 4.2.0, ne morate pozivati ​​srand () - PHP to radi automatski.
Funkcija Getrandmax (). Vraća maksimalni slučajni broj (32767).

Funkcije druge grupe (s prefiksom mt_)
Njihova imena i radnje slični su funkcijama prve skupine - mt_rand, mt_srand i mt_getrandmax. Glavna razlika je u tome što se slučajni brojevi uzimaju iz šireg raspona: od 0 do 21937 - 1. Štoviše, ove funkcije rade puno brže od svojih starih kolega, budući da koriste generator slučajnih brojeva Mersenne Twister, koji su 1997. razvili japanski znanstvenici. Odatle prefiks mt_ (Mersenne Twister).
Primjer upotrebe:

// Dajte nasumični broj od 1000 do 2000 echo mt_rand (1000, 2000);

Slučajni brojevi u JavaScriptu

Slučajni broj u JavaScriptu može se generirati pomoću Math.random (). Međutim, to će biti razlomak između 0 i 1 (ne uključujući 0 i 1). Da biste generirali nasumični cijeli broj u željenom rasponu, trebate napisati vlastitu funkciju