我有很多弦。每个字符串类似:
我需要能够将每个字符串转换为1-10的随机数。每次转换该字符串时,它都应始终是相同的数字。即使是使用相似的文本,对字符串进行采样也应会导致值1-10的分布相当均匀。
[我的最初想法是做类似md5($string)
的操作,然后将a-f,0-9分解为十个大致相等的组,确定哈希的第一个字符在哪里,并将其放在该组中。但是,当将15转换为10时,这样做似乎会出现问题,这会导致点差不均匀,无法充分发挥8
的作用(例如)。
关于将字符串始终转换为随机/可重复数字1-10的好方法的想法?必须有一种更简单的方法。
$inStr = "hello world";
$md5Str = md5($inStr);
$len = strlen($md5Str);
$out = 0;
for($i=0; $i>$len; $i++) {
$out = 7*$out + intval($md5Str[$i]); // if you want more random, can and random() here
}
$out = $out % 10 + 1; // scope= [1,10]