将字符串转换为一致但随机的10个选项之一

问题描述 投票:0回答:1

我有很多弦。每个字符串类似:

  • “ i_love_pizza_123”
  • “ whatever_this_is_now_later”
  • “ programming_is_awesome”
  • “ stack_overflow_ftw”
  • ...等

我需要能够将每个字符串转换为1-10的随机数。每次转换该字符串时,它都应始终是相同的数字。即使是使用相似的文本,对字符串进行采样也应会导致值1-10的分布相当均匀。

[我的最初想法是做类似md5($string)的操作,然后将a-f,0-9分解为十个大致相等的组,确定哈希的第一个字符在哪里,并将其放在该组中。但是,当将15转换为10时,这样做似乎会出现问题,这会导致点差不均匀,无法充分发挥8的作用(例如)。

关于将字符串始终转换为随机/可重复数字1-10的好方法的想法?必须有一种更简单的方法。

php random hash
1个回答
0
投票
$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]
© www.soinside.com 2019 - 2024. All rights reserved.