Komputery Okna Internet

Generuj losowe liczby w zakresie. Aplikacja funkcji losowych PHP php najlepszy generator liczb losowych

Inicjuje generator losowe liczby... Składnia:

Void srand (nasiona int)

Inicjuje generator liczb losowych za pomocą ziarna.

Srand ((podwójny) mikroczas () * 1000000);
$ losowo = rand ();
echo $ losowo;

GETRANDMAX

Zwraca największą możliwą liczbę losową. Składnia:

Wewn. getrandmax ()

Ta funkcja zwraca maksymalną wartość, którą można uzyskać za pomocą funkcji generowania liczb losowych rand ().

Zwykle jest to 32767

Generuje liczbę losową. Składnia:

Wśród (])

W przypadku wywołania z opcjonalnymi parametrami min i max ta funkcja generuje liczbę losową w obrębie tych parametrów włącznie. Jeśli brakuje parametrów min i max, zwracana jest liczba z zakresu od 0 do RAND_MAX.

Do poprawna praca ta funkcja, przed jej użyciem, musisz zainicjować generator liczb losowych za pomocą funkcji srand().

lcg_value ()

Generator liczb pseudolosowych LCG (PHP 4, PHP 5)

Opis:

Liczba zmiennoprzecinkowa lcg_value (nieważna)

lcg_value() zwraca pseudolosową liczbę z zakresu (0, 1). Funkcja łączy dwa generatory z 2 ^ 31 - 85 i 2 ^ 31 - 249 w okresie.

mt_getrandmax ()

Pokazuje największą możliwą losową wartość (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Int mt_getrandmax (nieważny)

Pokazuje maksymalną wartość, jaką może zwrócić funkcja mt_rand()

mt_rand ()

Generuje najlepszą losową wartość (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Int mt_rand ()

Wiele starszych generatorów liczb losowych ma wątpliwą charakterystykę i jest powolnych. Domyślnie PHP używa generatora liczb losowych funkcji rand(). Funkcja mt_rand() jest dobrym zamiennikiem. Wykorzystuje generator liczb losowych, który jest 4 razy szybszy niż rand () i wykorzystuje Twister Mersenne.

Wywoływana bez opcjonalnych argumentów min i max, mt_rand () zwraca pseudolosową wartość z zakresu od 0 do RAND_MAX. Jeśli potrzebujesz uzyskać np. losowe wartości od 5 do 15 włącznie, znajdziesz mt_rand (5, 15).

Przykład użycia mt_rand ()

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

echo mt_rand (5, 15);
?>

Ten przykład da w wyniku coś takiego:

1604716014
1478613278
6

Komentarz

Komentarz: Przed wersją 3.0.7 drugi parametr funkcji określał zakres liczb. Na przykład, aby uzyskać liczby losowe od 5 do 15, te wersje wymagają określenia funkcji mt_rand (5, 11).

mt_srand ()

Ustawia wartość początkową najlepszy generator liczby losowe (PHP 3> = 3.0.6, PHP 4, PHP 5)

Opis:

Unieważnij mt_srand ()

Ustawia ziarno dla generatora liczb losowych za pomocą zalążka. Od PHP 4.2.0 seed jest opcjonalny, a domyślne ustawienia wartości losowych są pomijane.

Przykład przy użyciu mt_srand ()

// seed z mikrosekundami
funkcja make_seed ()
{
list ($ usec, $ sec) = eksploduj ("", mikroczas ());
return (float) $ sec + ((float) $ usec * 100000);
}
mt_srand (make_seed ());
$randval = mt_rand ();
?>

Komentarz: Od PHP 4.2.0 nie jest już konieczne inicjowanie generatora liczb losowych za pomocą srand() lub mt_srand(), ponieważ dzieje się to teraz automatycznie.

Możesz użyć funkcji PHP rand() lub mt_rand() do wygenerowania liczby losowej. Wymóg używania liczb losowych często pojawia się w praktyce przy nazywaniu zmiennych, plikach, tworzeniu kluczowych informacji i zapewnianiu bezpieczeństwa.

Losowość i niepowtarzalność

Funkcja losowa PHP występuje w dwóch wersjach: rand () i mt_rand (). Uważa się, że algorytm w pierwszym przypadku jest prostszy i generuje liczby pseudolosowe. Druga opcja ma szybszy algorytm i znany cechy matematyczne... W większości przypadków, gdy potrzebujesz uzyskać losową liczbę, możesz użyć serii losowych wywołań PHP i uzyskać unikalną kombinację liczb.

Jeśli weźmiesz za podstawę liczby od 1 do 26 lub od 1 do 32 i otrzymasz je losowo, możesz utworzyć kluczowe informacje jako ciąg liter łacińskich lub cyrylicy. W tym przypadku PHP random to sposób na generowanie sekwencji alfabetycznych informacji, na przykład do testowania kanałów komunikacyjnych lub algorytmów.

Liczba losowa rzadko jest unikalna, ponieważ zgodnie z prawem rozkładu zmiennej losowej może występować wielokrotnie. Ale jeśli połączymy w szczególności statykę Zmienna PHP& Math.random of JavaScript, możesz uzyskać prawdziwą unikalną liczbę losową, która nie będzie się powtarzać w czasie.

Korzystanie z funkcji czasu

Funkcja czasu, zarówno PHP, jak i JavaScript, pozwala tworzyć unikalne kombinacje liczb, rzadko, gdy w jednym momencie może wystąpić wystarczająco duża liczba zdarzeń i wartość losowa zostanie powtórzony.

Stosując PHP random w zakresie sekund lub milisekund w szerokim zakresie możliwych wartości, możesz uzyskać unikalne losowe kombinacje cyfr lub liter. Co jeszcze?

Łącząc wartość funkcji czasu, sekwencyjnie rosnącą liczbę i losowe PHP lub możesz zapewnić niezawodne bezpieczeństwo kanałów komunikacji klienta i serwera, stwórz unikalne kody dla zmiennych, generuj nieprzewidywalne zdarzenia w algorytmach.

Generator liczb losowych PHP jest doskonałym rozwiązaniem dla większości zadań, zwłaszcza gdy potrzebujesz szybko uzyskać wysokiej jakości wyniki przy minimalnych kosztach. Korzystanie z funkcji rand() i mt_rand w połączeniu z sekwencyjnie rosnącymi seriami liczb lub wartościami czasu pozwala uzyskać liczby losowe, zarówno powtarzające się pod względem wartości, jak i niepowtarzalne.

Cześć wszystkim! W tym artykule przyjrzymy się co nowego w generowaniu liczb losowych w PHP 7.1.

Ta aktualizacja wydarzyła się niewidocznie dla programistów, ale poprawiła język programowania PHP w zakresie generowania liczb losowych.

O ile wiadomo, w PHP możemy użyć funkcji rand (min., maks.) do generowania liczb losowych:

Echo rand (7, 17);

Jeśli teraz odświeżysz stronę, za każdym razem otrzymasz nową losową liczbę.

Ale nie wszystko jest tak proste, jak mogłoby się wydawać. Chodzi o to, że w zależności od tego, dla czego generujesz liczbę losową, funkcja rand () używa różne systemy Pokolenie. Te. zależy to od systemu, w którym jest używany. Niektóre systemy mogą wykorzystywać słabe metody generowania, odpowiednio otrzymasz liczby nie do końca losowe.

V PHP 7,1 ten problem został naprawiony i dodano funkcję mt_rand ():

Echo mt_rand (7, 17);

Ta funkcja działa znacznie lepiej, w tym bezpieczeństwo. Ważne jest również, aby wiedzieć, że jeśli korzystasz z funkcji rand () v PHP 7,1, to zostanie automatycznie nadpisany na mt_rand ()... Te. rand () teraz tylko alias dla mt_rand ().

Wiele innych funkcji uzyskiwania losowych wyników zostało ulepszonych w PHP 7,1... Na przykład zobaczmy, jak możemy uzyskać losową wartość z tablicy:

$ imiona = ["Iwan", "Aleksander", "Wasilij"];
echo $ nazwy;

Te. wszelkie funkcje, takie jak ta, zostały ulepszone, aby generować liczby losowe lepszej jakości w PHP 7,1... Tak, ta aktualizacja przeszła niezauważona, ale bez względu na to, w jakim języku piszesz, bardzo ważne jest, aby zrozumieć, co dzieje się wewnątrz funkcji i jak ona się zachowuje.

A teraz bierzemy gotową funkcję generowania haseł i piszemy skrypt przywracający lub tworzący nowe hasło dla użytkowników Twojej witryny.

Skrypt odzyskiwania hasła

Jak zwykle pisze się scenariusz?

Jak zawsze opracowywany jest schemat krok po kroku, który musimy wykonać krok po kroku. Wszystko dzieje się w jednym pliku, przypomnienie.php

1. Uruchom skrypt tylko wtedy, gdy istnieje jakaś zmienna, na przykład $ action;

2. Aby rozpocząć proces generowania hasła, użytkownik określa adres e-mail $ _POST [`ema'l`]; Aby uprościć kod, przypisz tę wartość do zmiennej e-mail $.

3. Za pomocą wyrażeń regularnych sprawdzamy wszystkie znaki, aby użytkownik poprawnie podał adres e-mail. Jeśli nie, wyświetl błąd, zakończ działanie skryptu. Jeśli wszystko się zgadza, przejdźmy dalej.

4. Szukamy w bazie danych, w naszym przypadku w tabeli użytkowników dla użytkownika z następującymi adres pocztowy... Jeśli nie, wystawiamy błąd, że w bazie danych nie ma takiego adresu i kończymy działanie skryptu.

5. W bazie danych jest użytkownik z takim adresem, śmiało uruchom funkcję generowania nowego hasła. Ponadto pod adresem e-mail otrzymujemy unikalny identyfikator użytkownika z bazy danych i zapisujemy go w zmiennej $ id;

Technicznie rzecz biorąc, termin „generator liczb losowych” jest absurdalny, ponieważ same liczby nie są losowe. Na przykład, czy 100 jest liczbą losową? A 25? Termin ten tak naprawdę oznacza, że ​​tworzy ciąg liczb, które pojawiają się losowo. To rodzi więcej skomplikowany problem: co to jest ciąg liczb losowych? Jedyna poprawna odpowiedź: ciąg liczb losowych to ciąg, w którym wszystkie elementy nie są ze sobą powiązane. Ta definicja prowadzi do takiego paradoksu, że dowolna sekwencja może być zarówno losowa, jak i nielosowa, w zależności od tego, jak ta sekwencja jest otrzymywana. Na przykład następujący wiersz liczb
1 2 3 4 5 6 7 8 9 0
został odebrany przez drukowanie Górna linia klawisze w kolejności, więc sekwencja nie może być uważana za wygenerowaną losowo. Ale co, jeśli uzyskasz tę samą konsystencję, wyciągając ponumerowane piłki tenisowe z beczki. W tym przypadku jest to już losowo generowana sekwencja. Ten przykład pokazuje, że losowość ciągu zależy od sposobu jego uzyskania, a nie od samego siebie.

Pamiętaj, że sekwencja liczb generowanych przez komputer jest deterministyczna: każda liczba z wyjątkiem pierwszej zależy od liczb poprzedzających. Technicznie oznacza to, że komputer może wygenerować tylko quasi-losowy ciąg liczb, tj. w rzeczywistości nie są one naprawdę przypadkowe. Jest to jednak wystarczające dla większości zadań i dla uproszczenia takie sekwencje będą nazywane losowymi. Jedna bardzo interesująca metoda została opracowana przez Johna von Neumanna; jest często określany jako średnia kwadratowa. W tej metodzie poprzednia liczba losowa jest podnoszona do kwadratu, a następnie z wyniku wyodrębniane są środkowe cyfry. Na przykład, jeśli tworzysz liczby trzycyfrowe, a poprzednia liczba wynosiła 121, to podniesienie do kwadratu daje 14641. Zaznaczenie środkowych trzech cyfr daje następną losową liczbę 464. Wadą tej metody jest to, że ma bardzo krótki okres powtarzania, tzw. pętla ... Z tego powodu ta metoda nie jest dziś stosowana. Nowoczesne metody generowanie liczb losowych jest znacznie trudniejsze.

Liczby losowe w PHP

PHP ma dwie grupy funkcji liczb losowych. Zewnętrznie można je odróżnić przedrostkiem mt_ dla wszystkich funkcji jednej z grup.

Przestarzałe funkcje
Rand. Zwraca liczbę całkowitą od zera do RAND_MAX (czyli 32767). Może mieć dwa opcjonalne parametry całkowite - jeśli są podane, to od pierwszego parametru do drugiego generowana jest liczba losowa.

Echo rand (); rand echa (1100); // Rozdaj losową liczbę od 1 do 100

Kawałek. Określa sekwencję liczb losowych tworzonych przez funkcję rand. Ma parametr typu integer - dla różnych wartości tego parametru rand wygeneruje różne ciągi liczb. Srand musi być wywołany tylko raz przed wszystkimi wywołaniami rand. Przykład użycia:

Srand (1288); // Zainicjuj generator liczb losowych dla ($ i = 0; $ i<5;$i++){ echo rand(); echo "
"; }

Uwaga! Od PHP 4.2.0 nie musisz wywoływać srand() - PHP robi to automatycznie.
Funkcja Getrandmax(). Zwraca maksymalną liczbę losową (32767).

Funkcje drugiej grupy (z prefiksem mt_)
Ich nazwy i działania są podobne do funkcji z pierwszej grupy - mt_rand, mt_srand i mt_getrandmax. Główna różnica polega na tym, że liczby losowe są pobierane z szerszego zakresu: od 0 do 21937 - 1. Co więcej, funkcje te działają znacznie szybciej niż ich stare odpowiedniki, ponieważ wykorzystują generator liczb losowych Mersenne Twister, opracowany w 1997 roku przez japońskich naukowców. Stąd przedrostek mt_ (Mersenne Twister).
Przykład użycia:

// Podaj losową liczbę od 1000 do 2000 echo mt_rand (1000, 2000);

Liczby losowe w JavaScript

Liczba losowa w JavaScript można wygenerować za pomocą Math.random (). Będzie to jednak liczba ułamkowa z zakresu od 0 do 1 (bez 0 do 1). Aby wygenerować losową liczbę całkowitą w żądanym zakresie, musisz napisać własną funkcję