HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

странности рандоминга (PHP)
  #1  
Старый 06.03.2010, 22:59
mac737
Новичок
Регистрация: 22.01.2010
Сообщений: 8
С нами: 8579822

Репутация: 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..
 
Ответить с цитированием

  #2  
Старый 06.03.2010, 23:13
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

http://raz0r.name/articles/predskazyvaem-sluchajnye-chisla-v-php/
 
Ответить с цитированием

  #3  
Старый 06.03.2010, 23:14
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
С нами: 10262314

Репутация: 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(0count($str) - 1)];

        return 
$cod;
    } 
 
Ответить с цитированием

  #4  
Старый 06.03.2010, 23:25
mac737
Новичок
Регистрация: 22.01.2010
Сообщений: 8
С нами: 8579822

Репутация: 0
По умолчанию

спасибо за ответы
я так понял проблема в функции array_rand ? Потому как код Doom123 работает нормально
 
Ответить с цитированием

  #5  
Старый 06.03.2010, 23:44
[Raz0r]
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
С нами: 10109126

Репутация: 1980
По умолчанию

Потому что ты вероятнее всего запускал скрипт на винде, а в ней каждое сгенерированное число rand()'ом становится сидом для следующего.
 
Ответить с цитированием

  #6  
Старый 07.03.2010, 00:07
mac737
Новичок
Регистрация: 22.01.2010
Сообщений: 8
С нами: 8579822

Репутация: 0
По умолчанию

да, верно, запускал на винде. c функцией mt_rand всё отлично
ещё раз спасибо
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP 186 21.02.2010 02:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.