来自文本种子的随机数

时间:2014-11-26 00:10:07

标签: php random numbers

我正在尝试从字符串种子创建一个随机数,这是我尝试过的:

<?

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?

2 个答案:

答案 0 :(得分:1)

基础36到整数:

INTVAL($ STR,36) 整数到36(或你想要的):

base_convert($ val,10,36)

答案 1 :(得分:0)

md5()的十进制值无法正确表示;相反,您可以使用crc32()为您提供32位整数值,然后您可以将模数应用于:

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

它产生222/255个唯一值,是原始代码的两倍多。