我有字母数字字符串值。我需要用整数值表示每个字符串。
结果整数必须在30到150之间 多个字符串可以具有相同的整数值 每次运行时,特定字符串必须提供相同的整数值 加密并不重要,字符串值没有价值 更快的计算是更好的 所有整数都没有相同的值。
编辑:我尝试了intval()
,但它给了我零。然后我尝试md5
和sha1
给了我很长的字符串。我试过base_convert
但是无法做到。
答案 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);