Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   насчёт уникальности рандоминга PHP (https://forum.antichat.xyz/showthread.php?t=184560)

mac737 06.03.2010 22:59

странности рандоминга (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-и символьных
То ли я туплю, то ли просто что то недопонимаю..

Pashkela 06.03.2010 23:13

http://raz0r.name/articles/predskazyvaem-sluchajnye-chisla-v-php/

Doom123 06.03.2010 23:14

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;
    } 


mac737 06.03.2010 23:25

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

[Raz0r] 06.03.2010 23:44

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

mac737 07.03.2010 00:07

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


Время: 01:55