我正在尝试从字符串种子创建一个随机数,这是我尝试过的:
<?
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 :(得分: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个唯一值,是原始代码的两倍多。