2014-11-26 2 views
2

Я пытаюсь создать случайное число из строкового семени, это то, что я пробовал:случайное число из текста семени

<? 

function rand_n($text) 
{ 
    return fmod(hexdec(md5($text)), 1000) + 1000; 
} 

for($i=0; $i<=250; $i++) { 
    $n = rand_n("test$i"); 
    $a[] = $n; 
    echo $n . "\n"; 
} 

echo "Total: " . count($a) . "\n"; 
$a = array_unique($a); 
echo "Unique: " . count($a) . "\n"; 

Это своего рода работает, но это дает мне много дублей. Я пробовал другие методы, но они дали мне огромные числа, и я хочу сохранить его до 4 или 5 результатов. Я знаю, что с 5 буквами можно генерировать более уникальные, чем с 5 номерами, но мои записи похожи на test0 ... 250, они не настолько случайны.

Как я могу сделать этот генератор случайных чисел возвращать уникальные значения в зависимости от семени строки и сохранить длину результата в 4 или 5?

+0

Звучит для меня так, как будто вы вообще не хотите случайных чисел ... вы хотите хеш-функцию для строк, которая производит небольшое целое число. Я бы использовал что-то вроде FNV. –

ответ

1

Base 36 до Integer:

intval ($ ул, 36) Integer на основании 36 (или, что вы хотите, чтобы это было):

base_convert ($ Вал, 10, 36)

0

Десятичное значение от md5() не может быть представлено надлежащим образом; вместо этого вы можете использовать crc32(), чтобы дать вам целое 32-битное значение, которое вы можете применить к модулю:

function rand_n($text) 
{ 
    return crc32($text) % 1000 + 1000; 
} 

Это дает 222/251 уникальных значений, более чем в два раза больше, чем исходный код.

Смежные вопросы