ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
странности рандоминга (PHP) |

06.03.2010, 22:59
|
|
Новичок
Регистрация: 22.01.2010
Сообщений: 8
Провел на форуме: 53752
Репутация:
0
|
|
странности рандоминга (PHP)
Нужно было сделать что то вроде генератора ников на пхп. Много чего нашёл готового, но когда стал разбираться со всем этим мне показался странным процент уникальности такой генерки.
Вот простенький скрипт
PHP код:
<?php
$rands = null;
for ($j=0;$j<10000;$j++)//число генерируемых ников за раз
$rands[] = generate_name(2); // 2- это число символов в нике
echo count(array_unique($rands)).'<br>'; //здесь из массива выбираются только уникальные значения
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(3);
echo count(array_unique($rands)).'<br>';
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(4);
echo count(array_unique($rands)).'<br>';
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(10);
echo count(array_unique($rands)).'<br>';
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(20);
echo count(array_unique($rands)).'<br>';
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(30);
echo count(array_unique($rands)).'<br>';
$rands = null;
for ($j=0;$j<10000;$j++)
$rands[] = generate_name(40);
echo count(array_unique($rands)).'<br>';
function generate_name($len){
$abc = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
for ($i=0; $i<$len; $i++)
$str .= $abc[array_rand($abc)];
return $str;
}
?>
вот что у меня возвращает такой скрипт (из раза в раз значения меняются совсем чуть-чуть)
Код HTML:
560
2270
1210
1211
1211
1211
1211
Как 10000 3-х символьных слов могут быть более уникальны между собой в сранвении с уникальностью 10000 20-и символьных
То ли я туплю, то ли просто что то недопонимаю..
Последний раз редактировалось mac737; 06.03.2010 в 23:14..
|
|
|

06.03.2010, 23:13
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
http://raz0r.name/articles/predskazyvaem-sluchajnye-chisla-v-php/
|
|
|

06.03.2010, 23:14
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
PHP код:
function rnd($min,$max)
{//Рандомные значения
$len = mt_rand($min,$max);
$str = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'X',
'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9');
for ($i = 0; $i < $len; $i++)
$cod .= $str[mt_rand(0, count($str) - 1)];
return $cod;
}
|
|
|

06.03.2010, 23:25
|
|
Новичок
Регистрация: 22.01.2010
Сообщений: 8
Провел на форуме: 53752
Репутация:
0
|
|
спасибо за ответы
я так понял проблема в функции array_rand ? Потому как код Doom123 работает нормально
|
|
|

06.03.2010, 23:44
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
Потому что ты вероятнее всего запускал скрипт на винде, а в ней каждое сгенерированное число rand()'ом становится сидом для следующего.
|
|
|

07.03.2010, 00:07
|
|
Новичок
Регистрация: 22.01.2010
Сообщений: 8
Провел на форуме: 53752
Репутация:
0
|
|
да, верно, запускал на винде. c функцией mt_rand всё отлично
ещё раз спасибо
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|