Iyi Rastgele Yaratma PHP

5 Cevap php

Ben senin ne yaptığını biliyorum sadece) rand (kullanarak, öngörülebilir olduğunu biliyorum, ve sunucuya erişim var.

I have a project that is HIGHLY dependent on choosing a random that is as unpredictable as possible. So I'm looking for suggestions, either other built in functions, or user functions that can generate a 'better' random number.

I used this to do a little test:

$i=0;
    while($i<10000)
     {
     	$rand = rand(0,100);
    	if(!isset($array[$rand]))
    	 {
    		$array[$rand] = 1;
    	 }
    	else 
    	 {
    		$array[$rand]++;
    	 }
    	sort($array);
    	$i++;
     }

I sonucu eşit olarak dağıtılacak bulunan ve her bir numara oluşturulur kaç kez için bir tek model vardır.

5 Cevap

Ekleme, çarparak, ya da kötü bir rastgele kaynak kesiliyor size kötü rastgele bir sonuç verecektir. Bir açıklama için Introduction to Randomness and Random Numbers bakın.

PHP rand () fonksiyonu hakkında haklısın. Bir çarpıcı örnek için Statistical Analysis üzerine ikinci şekle bakın. (İlk rakam çarpıcıdır, ama rand ile çizilen değil Scott Adams, () tarafından çizilmiş oluyor).

Bir çözüm, random.org gibi bir gerçek rastgele jeneratör kullanmaktır. Başka, Linux / BSD / etc üzerinde iseniz. kullanmaktır /dev/random. Rastlantısallığı kritik görev ise, bir hardware random generator kullanmak zorunda olacak.

Ben rastgele izlenim dikkatli olacaktır: insanlar daha az rastgele dağılımını seçsin birçok deney olmuştur. Bu zihin Rasgeleliği üreten veya tahmin çok iyi değil gibi görünüyor.

Başka true random generator dahil Fourmilab de rastgele iyi makaleleri vardır. Bir aşağı eğer hala başka var ve bu yüzden belki iki sitelerden rastgele veri alabilir.

Fourmilab da bir test program kontrol etmek rasgelelik sağlar. Size çeşitli myRand () programları kontrol etmek için kullanabilirsiniz.

Eğer 10000 değerlerini üretmek eğer son programına gelince, neden 10.000 arasında nihai değerini seçmeyin? Sen bir alt kendinizi kısıtlamak. Lütfen $ min ve max $ 10.000 büyükse de, o iş olmaz.

Neyse, ihtiyaç rastlantısallığı uygulamanıza bağlıdır. rand (), bir online oyun için Tamam olacak, ama Tamam değil kriptografi (iyice istatistik programları ile test şey değil zaten kriptografi için uygun olmayacaktır). Sen hakim olun!

Rand için tohum olarak EPOCH yana geçen milisaniye sayısını kullanarak KG @ üzerinde varyasyon,?

UUID'sini almak kavramına benzer rastgele sayılar, almanın başka bir yolu

PHP Sürüm 5.3 ve üstü

openssl_random_pseudo_bytes(...)

Ya library aşağıdaki kullanarak RFC4122 deneyebilirsiniz