文本到随机数

Qia*_*iao 1 php

如何从文本中获取随机数?

function text_to_number($text, $min, $max)
{
    ....
    mt_rand($min, $max);
    ....
    return $random_number;
}

$rand1 = text_to_number("text1", 1, 1000);
$rand2 = text_to_number("text2", 1, 1000);
Run Code Online (Sandbox Code Playgroud)

所以"text1"总是返回476(例如)in mt_rand(1, 1000),而"text2" - 总是241.
是否可能?

Bre*_*ker 6

我会说忘记"随机",听起来你真正想要的是某种形式的哈希.这是一个简单的实现,它使用字符串的md5哈希值并使用模数将其缩放到所需的范围内.

function text_to_number($text, $min = 0, $max = 1000)
{
  return fmod(hexdec(md5($text)), ($max - $min)) + $min;
}
Run Code Online (Sandbox Code Playgroud)


vav*_*ava 5

你想要做的是根据你的字符串为随机生成器提供值.看,代码

mt_srand(5);
$value = mt_rand(1, 10);
Run Code Online (Sandbox Code Playgroud)

$value无论您调用多少次,都会始终为其分配相同的值.更好的是,对mt_rand的所有其他调用将从一次运行到另一次运行一致地返回相同的值(彼此不同),但您不应该关心它.

所以,你必须写

function make_seed($text) {
   //do seed calc
   return $seed;
}

function text_to_number($text, $min, $max) {
   mt_srand(make_seed($text));
   return mt_rand($min, $max);
}
Run Code Online (Sandbox Code Playgroud)

如何根据文本计算种子是另一个问题.您可以将每个char转换为整数并对它们求和.你可以计算CRC32.您可以制作MD5并参与其中.这里有很多选择.

但实际上,为什么不直接使用某种CRC或MD5?