Czy istnieje sposób na wygenerowanie liczby losowej na podstawie wartości minimalnej i maksymalnej?
Na przykład, jeśli min wynosi 1, a maksimum 20, powinno wygenerować dowolną liczbę od 1 do 20, w tym 1 do 20?
Czy istnieje sposób na wygenerowanie liczby losowej na podstawie wartości minimalnej i maksymalnej?
Na przykład, jeśli min wynosi 1, a maksimum 20, powinno wygenerować dowolną liczbę od 1 do 20, w tym 1 do 20?
random_int()
, random_bytes()
lub openssl_random_pseudo_bytes()
. jak powiedział @Salvador Dali rand()
, nie generują wyników bezpiecznych kryptograficznie. Zobacz dokumentację php.net/manual/en/function.rand.php
Odpowiedzi:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
musisz dodać interwały razem, jak opisano w tej odpowiedzi .
W nowym PHP7 jest wreszcie wsparcie dla kryptograficznie zabezpieczonych pseudolosowych liczb całkowitych.
int random_int ( int $min , int $max )
random_int - generuje bezpieczne kryptograficznie pseudolosowe liczby całkowite
co zasadniczo sprawia, że poprzednie odpowiedzi są nieaktualne.
random_int
i random_bytes
funkcji - github.com/paragonie/random_compat .
random_int
? Jeśli daje „lepsze” liczby losowe, dlaczego nie użyć go z powodów innych niż krypto?
random_int
s na rand
s. Ponadto moim przypadkiem użycia jest algorytm ponawiania i zdecydowanie nie chcę, aby wiele nieudanych funkcji zlepiało się po uśpieniu z powodu przewidywalnych losowych ints
Szybciej szybsza wersja użyłby mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
Źródło: http://www.php.net/manual/en/function.mt-rand.php .
UWAGA: Aby to działało, Twój serwer musi mieć włączony moduł Math PHP. Jeśli tak się nie stanie, zrób błąd swojego hosta, aby go włączyć, lub musisz użyć normalnego (i wolniejszego) rand ().
Tutaj zestawiłem odpowiedzi i uczyniłem je niezależnymi od wersji;
function generateRandom($min = 1, $max = 20) {
if (function_exists('random_int')):
return random_int($min, $max); // more secure
elseif (function_exists('mt_rand')):
return mt_rand($min, $max); // faster
endif;
return rand($min, $max); // old
}
rand(1,20)
Dokumentacja funkcji rand w PHP jest tutaj:
http://php.net/manual/en/function.rand.php
Użyj tej srand()
funkcji, aby ustawić wartość ziarna generatora liczb losowych.
Spróbuj tego. Wygeneruje identyfikator zgodnie z Twoim życzeniem.
function id()
{
// add limit
$id_length = 20;
// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {
// generate randomly within given character/digits
@$token .= $alfa[rand(1, strlen($alfa))];
}
return $token;
}