// $str - строка с числами, на основе которой получаем псевдослучайное число
// функция возвращает псевдослучайное число на основе $str в диапазоне [$min, $max]
function get_int($str,$min,$max)
{
$str=base_convert(md5($str), 16, 10);
$lenght=mb_strlen($str);
$num=0;
for($i=0; $i<$lenght; $i++)
{
$num+=$str[$i];
if($num>=$min && $num<$max)
break;
if($num>$max)
$num/=2;
}
return (round($num));
}
Проверяю распределение таким кодом:
$m=array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
for($c=0; $c<20000; $c++)
{
// current_url() - возвращает текущий url. Добавляю $c чтобы получить уникальный url
$str=current_url().$c;
$rand=get_int($str,1,20)-1;
$m[$rand]+=1;
}
echo '<pre>';
echo print_r($m);
echo '</pre>';
В результате получаю:
Array
(
[0] => 6498
[1] => 6568
[2] => 3056
[3] => 616
[4] => 632
[5] => 657
[6] => 681
[7] => 638
[8] => 654
[9] => 0
[10] => 0
[11] => 0
[12] => 0
[13] => 0
[14] => 0
[15] => 0
[16] => 0
[17] => 0
[18] => 0
[19] => 0
)
1
Помогите допилить код, чтоб распределение нормальное было