Računalniki Windows internet

Ustvari naključna števila v območju. Uporaba PHP naključne funkcije Php najboljši generator naključnih števil

Izvede inicializacijo generatorja naključna števila. sintaksa:

void srand (int seed)

Inicializira generator naključnih števil z začetno vrednostjo.

Srand((dvojno) mikročas()*1000000);
$random = rand();
odmev $random;

GETRANDMAX

Vrne največje možno naključno število. sintaksa:

int getrandmax()

Ta funkcija vrne največjo vrednost, ki jo je mogoče pridobiti s funkcijo generiranja naključnih številk rand().

Običajno je 32767

Ustvari naključno število. sintaksa:

Int rand(])

Ko jo pokličete z neobveznimi parametri min in max, ta funkcija generira naključno število, ki je znotraj teh parametrov, vključno. Če parametra min in max nista, se vrne število med 0 in RAND_MAX.

Za pravilno delovanje to funkcijo, preden jo uporabite, morate inicializirati generator naključnih števil s funkcijo srand ().

lcg_value()

Generator psevdo naključnih števil LCG (PHP 4, PHP 5)

Opis:

Float lcg_value(void)

lcg_value() vrne psevdonaključno število v obsegu (0, 1). Funkcija združuje dva generatorja c 2^31 - 85 in 2^31 - 249 v obdobju.

mt_getrandmax()

Prikazuje največjo možno naključno vrednost (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Opis:

int mt_getrandmax(void)

Prikazuje največjo vrednost, ki jo lahko vrne funkcija mt_rand().

mt_rand()

Ustvari najboljšo naključno vrednost (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Opis:

int mt_rand()

Številni starejši generatorji naključnih števil imajo vprašljivo zmogljivost in so počasni. PHP privzeto uporablja generator naključnih števil funkcije rand(). Funkcija mt_rand() je dobra zamenjava zanjo. Uporablja generator naključnih števil, ki je 4-krat hitrejši od rand() in uporablja Mersenne Twister.

Klicana brez izbirnih argumentov min in max, mt_rand() vrne psevdonaključno vrednost med 0 in RAND_MAX. Če želite na primer dobiti naključne vrednosti med 5 in 15 vključno, poiščite mt_rand (5, 15).

primer mt_rand().

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

echo mt_rand(5, 15);
?>

Rezultat izvajanja tega primera bo nekako takole:

1604716014
1478613278
6

Komentar

Komentar: V različicah pred 3.0.7 je drugi parameter funkcije določal obseg številk. Na primer, da bi dobili naključna števila med 5 in 15, te različice zahtevajo, da se poda funkcija mt_rand(5, 11).

mt_srand()

Nastavi začetno vrednost najboljši generator naključna števila (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Opis:

Void mt_srand()

Nastavi začetno vrednost generatorja naključnih števil z uporabo semena. Od PHP 4.2.0 je seme neobvezno in privzete nastavitve za naključne vrednosti so izpuščene.

primer mt_srand().

// seme z mikrosekundami
funkcija make_seed()
{
seznam($usec, $sec) = explode(" ", microtime());
return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>

Komentar: Od PHP 4.2.0 ni več treba inicializirati generatorja naključnih števil s funkcijama srand() ali mt_srand(), saj se to zdaj izvaja samodejno.

Če želite ustvariti naključno število, lahko uporabite funkcijo PHP rand() ali mt_rand(). Zahteva po uporabi naključnih številk se v praksi pogosto pojavlja za poimenovanje spremenljivk, datotek, ustvarjanje ključnih informacij in zagotavljanje varnosti.

Naključnost in edinstvenost

Naključna funkcija PHP je na voljo v dveh različicah: rand() in mt_rand(). Menijo, da je algoritem v prvem primeru enostavnejši in generira psevdo-naključna števila. Druga možnost ima hitrejši algoritem in je znana matematične značilnosti. V večini primerov, ko morate dobiti naključno številko, lahko uporabite niz naključnih klicev PHP in dobite edinstveno kombinacijo številk.

Če za osnovo vzamemo številke od 1 do 26 ali od 1 do 32 in jih dobimo naključno, lahko ključne informacije oblikujemo kot zaporedje latiničnih ali cirilicnih črk. V tem primeru je PHP random način za generiranje zaporedja abecednih informacij, na primer za namene testiranja komunikacijskih kanalov ali algoritmov.

Naključno število je redko edinstveno, saj se lahko pojavi večkrat v skladu z zakonom porazdelitve naključne spremenljivke. Če pa združimo predvsem statično spremenljivka PHP& Math.random jezika JavaScript, potem lahko dobite resnično edinstveno naključno število, ki se ne bo ponovilo v času.

Uporaba časovne funkcije

Funkcija časa, tako PHP kot JavaScript, vam omogoča, da oblikujete edinstvene kombinacije številk, le redko, ko se lahko v enem trenutku pojavi dovolj veliko število dogodkov in naključna vrednost bo ponovil.

Z uporabo PHP naključnega v razponu sekund ali milisekund s širokim razponom možnih vrednosti lahko dobite edinstvene naključne kombinacije številk ali črk. Kaj drugega?

Če združite vrednost časovne funkcije, stalno naraščajoče število in naključno PHP ali pa lahko zagotovite zanesljivo varnost komunikacijskih kanalov odjemalca in strežnika, ustvarite edinstvene kode za spremenljivke ustvarite nepredvidljive dogodke v algoritmih.

Generator naključnih številk PHP je odlična rešitev za večino nalog, še posebej, ko morate hitro dobiti visokokakovostne rezultate z minimalnimi stroški. Uporaba funkcij rand() in mt_rand v kombinaciji z zaporedno rastočimi serijami številk ali časovnih vrednosti vam omogoča, da dobite naključna števila, ki se ponavljajo v vrednostih in so edinstvena.

Pozdravljeni vsi skupaj! V tem članku si bomo ogledali kaj je novega za generiranje naključnih števil v PHP 7.1.

Ta posodobitev se je razvijalcem zgodila nevidno, vendar je izboljšala programski jezik PHP na področju generiranja naključnih števil.

Kolikor je znano, v PHP lahko uporabimo funkcijo rand(min, max) za ustvarjanje naključnih številk:

echo rand (7, 17);

Če zdaj osvežite stran, boste vsakič dobili novo naključno številko.

Vendar ni vse tako preprosto, kot se morda zdi. Stvar je, odvisno od tega, za kaj generirate naključno število, funkcija rand() uporablja različni sistemi generacije. tiste. odvisno od sistema, v katerem se uporablja. Nekateri sistemi lahko uporabljajo šibke metode generiranja, zato boste dobili številke, ki niso povsem naključne.

V PHP 7.1 ta težava je bila odpravljena in dodana je bila funkcija mt_rand():

echo mt_rand(7, 17);

Ta funkcija deluje veliko bolje, vključno z varnostjo. Pomembno je tudi vedeti, da če uporabljate funkcijo rand() v PHP 7.1, potem bo samodejno prepisan z mt_rand(). tiste. rand() zdaj samo vzdevek za mt_rand().

Številne druge funkcije za pridobivanje naključnih rezultatov so bile izboljšane PHP 7.1. Na primer, poglejmo, kako lahko dobimo naključno vrednost iz matrike:

$names = ["Ivan", "Alexander", "Vasilij"];
echo $names;

tiste. vse funkcije, kot je ta, so bile izboljšane za ustvarjanje boljših naključnih številk PHP 7.1. Da, ta posodobitev je ostala neopažena, toda ne glede na jezik, v katerem pišete, je zelo pomembno razumeti, kaj se dogaja znotraj funkcije in kako se obnaša.

In zdaj vzamemo že pripravljeno funkcijo generiranja gesla in napišemo skript za obnovitev ali ustvarjanje novega gesla za uporabnike vašega spletnega mesta.

Skript za obnovitev gesla

Kako je običajno napisan scenarij?

Kot vedno je sestavljena shema po korakih, kaj moramo narediti korak za korakom. Vse se zgodi v eni datoteki, monument.php

1. Zaženite skript samo, če obstaja določena spremenljivka, na primer $action;

2. Za začetek postopka ustvarjanja gesla uporabnik določi e-poštni naslov $_POST[`ema‘l`]; Za poenostavitev kode dodelimo to vrednost spremenljivki $email.

3. Z uporabo regularnih izrazov preverimo vse znake, da zagotovimo, da je uporabnik pravilno navedel elektronski naslov. Če ne, se prikaže napaka, zaustavite skript. Če je vse pravilno, gremo naprej.

4. Iščemo v bazi podatkov, v našem primeru v tabeli uporabnikov, uporabnika s takšnim poštni naslov. Če ne, izdamo napako, da v bazi podatkov ni takega naslova, in zaustavimo skript.

5. V bazi je uporabnik s takšnim naslovom, pojdite in zaženite funkcijo generiranja novega gesla. Prav tako na e-poštni naslov dobimo iz baze unikaten ID uporabnika in ga zapišemo v spremenljivko $id;

Tehnično je izraz "generator naključnih številk" absurden, saj številke same niso naključne. Na primer, ali je 100 naključno število? Kaj pa 25? Ta izraz v resnici pomeni, da se ustvari zaporedje številk, ki se pojavlja naključno. Ustvarja več zapleteno vprašanje: kaj je zaporedje naključnih števil? Edini pravilen odgovor je: zaporedje naključnih števil je zaporedje, v katerem vsi elementi niso povezani. Ta definicija vodi do takšnega paradoksa, da je lahko katero koli zaporedje naključno ali nenaključno, odvisno od tega, kako se to zaporedje pridobi. Na primer naslednji niz številk
1 2 3 4 5 6 7 8 9 0
prejeli s tiskom Zgornja vrstica tipkovnice po vrstnem redu, zato zaporedja ni mogoče šteti za naključno ustvarjeno. Kaj pa, če dobite enako zaporedje tako, da iz soda vzamete oštevilčene teniške žogice. V tem primeru je to že naključno ustvarjeno zaporedje. Ta primer kaže, da je naključnost zaporedja odvisna od tega, kako je bilo pridobljeno, in ne od samega sebe.

Ne pozabite, da je zaporedje številk, ki jih ustvari računalnik, deterministično: vsako število, razen prvega, je odvisno od prejšnjih številk. Tehnično to pomeni, da lahko računalnik generira le kvazi naključno zaporedje številk, t.j. pravzaprav niso resnično naključni. Vendar pa to zadostuje za večino težav in takšna zaporedja bomo zaradi preprostosti imenovali naključna. Eno zelo zanimivo metodo je razvil John von Neumann; pogosto se imenuje RMS. Pri tej metodi se prejšnje naključno število kvadrira, nato pa se iz rezultata izvlečejo srednje števke. Na primer, če ustvarjate števila s tremi števkami in je bilo prejšnje število 121, potem je rezultat kvadriranja 14641. Če ekstrahirate srednje tri števke, dobite naslednje naključno število 464. Pomanjkljivost te metode je, da ima zelo kratko ponovitev. obdobje, imenovano cikel. Zaradi tega se ta metoda danes ne uporablja. Sodobne metode generiranje naključnih števil je veliko težje.

Naključna števila v PHP

PHP ima dve skupini funkcij za delo z naključnimi števili. Navzven jih je mogoče razlikovati po predponi mt_ za vse funkcije ene od skupin.

Zastarele funkcije
rand funkcija. Vrne celo število od nič do RAND_MAX (kar je 32767). Lahko ima dva neobvezna celoštevilska parametra – če sta podana, se od prvega parametra do drugega generira naključno število.

echo rand(); echo rand (1,100); // Podaj naključno število od 1 do 100

srand funkcija. Določa zaporedje naključnih števil, ki jih vrne funkcija rand. Ima celoštevilski parameter - z različnimi vrednostmi tega parametra bo rand ustvaril različna zaporedja številk. Funkcijo srand je treba poklicati le enkrat, pred vsemi klici funkcije rand. Primer uporabe:

Srand (1288); // Inicializacija generatorja naključnih števil za($i=0; $i<5;$i++){ echo rand(); echo "
"; }

Pozor! Od PHP 4.2.0 vam ni treba klicati srand() - PHP to naredi samodejno.
funkcija getrandmax(). Vrne vrednost največjega naključnega števila (32767).

Funkcije druge skupine (s predpono mt_)
Njihova imena in dejanja so podobna funkcijam prve skupine - mt_rand, mt_srand in mt_getrandmax. Glavna razlika je v tem, da so naključna števila vzeta iz širšega obsega: od 0 do 2 19937 − 1. Poleg tega te funkcije delujejo veliko hitreje kot njihovi starejši kolegi, saj uporabljajo generator naključnih števil Mersenne Twister, ki so ga leta 1997 razvili japonski znanstveniki. . Od tod predpona mt_ (Mersenne Twister).
Primer uporabe:

// Ustvari naključno število med 1000 in 2000 echo mt_rand(1000, 2000);

Naključna števila v JavaScriptu

Naključno število v JavaScriptu se lahko ustvari z Math.random(). Vendar pa bo to ulomno število med 0 in 1 (brez 0 in 1). Če želite ustvariti naključno celo število v želenem obsegu, morate napisati lastno funkcijo