Minimum ve maksimuma dayalı rastgele bir sayı oluşturmanın bir yolu var mı?
Örneğin, min 1 ve maks 20 ise, 1 ile 20 dahil 1 ile 20 arasında herhangi bir sayı üretmelidir?
Minimum ve maksimuma dayalı rastgele bir sayı oluşturmanın bir yolu var mı?
Örneğin, min 1 ve maks 20 ise, 1 ile 20 dahil 1 ile 20 arasında herhangi bir sayı üretmelidir?
random_int()
, random_bytes()
ya da openssl_random_pseudo_bytes()
. @Salvador Dali'nin dediği rand()
gibi kriptografik olarak güvenli sonuçlar üretmeyin. Php.net/manual/en/function.rand.php
Yanıtlar:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
açıklandığı gibi aralıkları birlikte eklemeniz gerekiyorsa .
Yeni bir PHP7'de nihayet kriptografik olarak güvenli sözde rastgele tamsayılar için bir destek vardır .
int random_int ( int $min , int $max )
random_int - Kriptografik olarak güvenli sözde rastgele tamsayılar üretir
bu da temelde önceki cevapları geçersiz kılar.
random_int
ve random_bytes
- fonksiyonunu github.com/paragonie/random_compat .
random_int
mı? Eğer "daha iyi" rasgele sayılar veriyorsa, neden kripto dışı nedenlerle kullanmıyorsunuz?
random_int
s'yi s olarak değiştirmemek için yeterince önemsiz rand
. Ayrıca, benim kullanım durumum bir yeniden deneme algoritması ve tahmin edilebilir rastgele girdiler nedeniyle uykudan sonra birden fazla başarısız işlevin kümelenmesini kesinlikle istemiyorum
Bir daha hızlı daha hızlı bir sürümü kullanmak mt_rand olacaktır:
$min=1;
$max=20;
echo mt_rand($min,$max);
Kaynak: http://www.php.net/manual/en/function.mt-rand.php .
NOT: Bunun çalışması için sunucunuzda Math PHP modülünün etkinleştirilmiş olması gerekir. Aksi takdirde, ana makinenizin onu etkinleştirmesini engelleyin veya normal (ve daha yavaş) rand () kullanmanız gerekir.
Cevapları burada bir araya getirdim ve sürümden bağımsız hale getirdim;
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)
PHP'nin rand işlevi için dokümanlar burada:
http://php.net/manual/en/function.rand.php
srand()
Rastgele sayı üretecinin çekirdek değerini ayarlamak için işlevi kullanın .
Bunu dene. İsteğinize göre kimlik oluşturacaktır.
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;
}