Псевдослучайные числа - как лучше сгенерировать?

lantastic

Новичок
Псевдослучайные числа - как лучше сгенерировать?

Нужно к каждому слову-строке "привязать" определенную последовательность случайных чисел, но так чтобы для слова она была постоянна, и потом всегда можно было ее получить эту серию чисел.

Думаю сделать так: брать md5 от слова и перевести несколько первых байт в десятичное значение. А как получать остальные числа?

Есть ли какие-то еще способы? сеять генератор с использованием srand() наверное не получится. потому что не меняется ли он с разными версиями PHP? да и вообще, алгоритм закрытый, вдруг понадобится портировать систему под другой язык?
 

Кром

Новичок
Я так понимаю, что у тебя в голове перемешались методы шифрования информации, методы получение хешей и просто генераторы случайных чисел. Бывает.
Поэтому лучше раскажи зачем все это нужно?
 

lantastic

Новичок
Для игры. Суть в том, чтобы для каждого ника игрока была своя последовательность чисел... Которая не менялась на протяжении всей его истории... Некая затравка, определяющая сюжет :)
 

Кром

Новичок
Последовательность чисел для каждого игрока. Понятно.
Непонятно, зачем она нужна. И как она превращается в затравку определяющую сюжет?
Поподробней, если можно.
 

lantastic

Новичок
Обычно делается как? Регистрируется игрок, играет, все события в игре для него определяются случайными числами, как и для всех (исходы сражений, случайные артефакты и т.п.)... это сделать нетрудно.

Я же хочу, чтобы вся последовательность чисел, которая понадобится, генерировалась бы для игрока на основе его ника. Естественно, игроки об этом не знают, да это и не важно для них. Числа так же случайные, просто определяются они на основе ника и жестко завязаны. Так потом мне будет проще проследить закономерности игры и т.п...

Ну это все отход от темы :( Как сгенерировать такую псевдослучайную последовательность? не охота использовать проприетарный srand() :)
 

Кром

Новичок
Генерировать случайные числа на основе ника несколько странно. Но если так хочется, то md5 или sha1 вполне подойдет.
 

lantastic

Новичок
Да, странновато, но сойдет :) ники будут уникальны, да и привязаться можно к чему-нибудь другому... Хорошо, берем md5 от ника. Но как теперь генерировать на основе этой затравки бесконечную серию псевдослучайных чисел.

Итак, нужен алгоритм функции psevdo($nick, $i), возвращающей $i-е псевдослучайное число, для ника $nick. :)
 

Денч

Новичок
$i[]=md5($nick)
$i[]=md5($i[0])
$i[]=md5($i[1])
ну и как то циферки получить из этого...
...

грубовато конечно...
 

Кром

Новичок
Да ка хочешь.
md5('nic') - один хеш
md5(md5('nic')) - второй
md5(md5(md5('nic'))) - третий. :)
 

lantastic

Новичок
Пасиб, на основе ваших идей, я тут придумал вот как:

$r = crc32($nick . $i); ;)

Просто и оригинально. Алгоритм crc32 надеюсь во всех языках и платформах один и тот же?
 

Кром

Новичок
>Просто и оригинально. Алгоритм crc32 надеюсь во всех языках и платформах один и тот же?

C чего бы ему менятся, алгоритм открытый.

>У меня красивее

Ну получай пирожок. :)
 

rotoZOOM

ACM maniac
lantastic напоследок, если не уверен в стандартном srand, то напиши свой (пару строчек кода, не больше), вот тут все подробненько описано.
 
Сверху