Шанса при rand();

Не е така. Направи си един rand(0,100) и дай рефреш 5 - 6 пъти. Ще ти се покаже едно и също число минимум 2 пъти.
 
Доколкото ми е известно с математически модели НЕ може да се генерира напълно случайно число. Тази функция генерира ПСЕВДОСЛУЧАЙНИ числа, един вид случайни, ама не съвсем.
 
Еми шанса е 1 на 100 да се покаже това число. Никой не знае какво число ще се покаже. В случая, както казаха е 1 на 9999 да ти изкара еднакво число.
Кажи какво искаш да направиш, варианти за всичко си има.
 
Шанса да се падне едно избрано от теб число в диапазона 0 - 100 е 1/100.

При повече пускания шанса да се засекат се увеличава. Може да прочетеш това: http://en.wikipedia.org/wiki/Birthday_problem
Линка по-горе обяснява, че при 57 случайни хора вероятността двама да имат един и същ рожден ден е 99%.
 
От любопитсво питам. Защото като се качват снимки ги преименувам в random числа и md5 нещо от този сорт.


Името на файла го правя md5 заради - ако е на кирилица.

PHP:
$random_name=rand(0000,9999);
$random_name1=rand(00000,99999);
$mdname=$_FILES['neshto']['name'];

$new_name=$random_name.$random_name1.$mdname;

Фотоапарат записва снимките с имена image(1), image(2) примерно. Ако си изпразниш memory картата и пак записва от image(1), image(2).

И като качваш снимки(преди и след форматирането на memory картата) нормално md5 - то да е еднакво, но числата трябва да се различни иначе се получава застъпване.

Попринцип ако е сайт за потребители които си качват снимките, може да ги разделяш на папки и така да огранича до някъква степен съвпадането, но в този случай не става.
 
Бях попитал Иван Ванков (gatakka) как се избират тези числа и ето какво ми отговори:

Такова нещо като произволно число няма, дори и квантовите физици имат
проблем с генерирането на такива числа :)
Като цяло, това са псевдо произволни числа, което значи, че
статистически минават за произволни, но те зависят от часовника на
компютъра, взимат се мили (микро) секундите и от там с различни
алгоритми се генерира някакво подобни число. Тоест всичко опира до
кварца.
 
Е, то е ясно, че от някаква си там глобална гледна точка тези числа не са случайни, но от човешка гледна точка са случайни, защото ние не можем да ги предвидим. Иначе за някой свръх-интелект, който може да изчисли всеки атом на компютъра какво ще направи, тези числа няма да са случайни.
 
Можеш да ги предвидиш. Въпроса е, че не е толкова лесна работа. Но май се отклонихме от темата.

Най-добрия вариант е да направиш нещо такова:

md5($filename . microtime())

Ако искаш вкарай си и един rand вътре, но няма смисъл. Едва ли в една и съща микросекунда (една милионна от секундата) ще се качат 2 файла с едно и също име.
 
Не пречи да се проверява дали съществува вече файл с такова име, ако съществува генерира наново и пак проверява и така докато не го допусне скрипта.
 
Също към алгоритъма за произволни числа искам да добавя, че той се стреми да остане в центъра на диапазона, който му е даден.
Сиреч: ако вадим числата от 1 до 6, шанса да се падне 3 е много по-голям от колкото да се падне 1 или 6. :) Намерих си лекцийте по JAVA :)))


P.S.:
http://en.wikipedia.org/wiki/Linear_congruential_generator
 

Back
Горе