0

我有字母数字字符串值。我需要用一个整数值来表示每个字符串。

结果整数必须介于 30 和 150 之间。
多个字符串可以具有相同的整数值。
每次运行时,特定字符串必须给出相同的整数值。
加密不重要,字符串值没有价值。
更快的计算是首选。
所有整数不能具有相同的值。

编辑:我试过intval()了,但它给了我零。然后我尝试了md5sha1它给了我很长的字符串。我试过base_convert但做不到。

4

2 回答 2

3

这将需要一个哈希函数。您的范围是150-30=120这样,您需要将% 120结果取模 120 ( ) 并加上 30。

在 PHP 中,大多数标准哈希函数(md5、sha)都是出于安全目的并返回一个不太有用的字符串。在这种情况下,您可以使用循环冗余检查: http: //php.net/crc32。这不是哈希(值分布不均匀),但可能足够接近您的目的。

$stringhash = crc32($string) % 120 + 30;

如果您需要更均匀的分布,您也可以使用简单的标准散列,例如 md5,但这会更慢。

// Take the first 8 alphanumeric digits of the hash (= 32 bits) because we want to keep an int and not convert it to a floating point
$stringhash = intval(substr(md5($string), 0, 8), 16) % 120 + 30;
于 2013-05-14T20:01:32.187 回答
0

通过使用@dtech 的回答,我完成了这样的功能:

public function convertStringToInteger($string, $min, $max, $dateDepended=FALSE) {
    $interval = $max-$min;
    if ($dateDepended) {
        $addMore=strtotime("today");
    } else {
        $addMore=0;
    }
    return ( (crc32($string)+$addMore) % $interval ) + $min;
}

convertStringToInteger("myword",30,150,TRUE);
于 2013-05-17T16:57:58.730 回答