将字符串转换为特定范围之间的整数

时间:2013-05-14 19:58:22

标签: php integer

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

结果整数必须在30到150之间 多个字符串可以具有相同的整数值 每次运行时,特定字符串必须提供相同的整数值 加密并不重要,字符串值没有价值 更快的计算是更好的 所有整数都没有相同的值。

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

2 个答案:

答案 0 :(得分:2)

这需要哈希函数。您的范围为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;

答案 1 :(得分: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);