-1

我想知道如何从包含字母和数字的字符串中生成一个数字。要求是相同的字符串必须始终生成相同的数字。

我试图在 PHP 中找到一种编码类型,它返回一个字符串的整数。

我不需要将其转换回字符串。有没有这样的编码可用?

4

3 回答 3

0

我想我得到了解决方案。

我一直在寻找类似 crc32 的东西。它给了我一个字符串的整数。

谢谢你们的帮助,我很抱歉再次不清楚。

于 2012-07-16T20:12:12.337 回答
0

您正在寻找一个散列函数。我在这里发布了一个示例算法,用于从字符串中生成一个小数:

// making hex hash from sentence
$s = hash( 'ripemd160', "I'm a dog" );

// taking last 5 hex digits
$s2 = substr( $s, -5 );

// converting hex digits to number
echo hexdec( $s2 );

示例算法说明:

  • 从一个字符串做一个哈希。'ripemd160' 是哈希算法的名称,其他哈希算法:“md5”、“sha256”、“haval160,4”等。“I'm a dog”是要哈希的句子样本。
  • 从散列中只取几位数字就可以取一个小数字。为此,我取最后 5 位数字
  • 最后将十六进制数字转换为数字

请注意,这只是从字符串生成数字的多种方法的示例。

测试:

dani@egg-v2:~$ php5
<?php
$a=array( "I'm a dog", "I'm a cat", "I'm a car" );
foreach ($a as $e) {
   $s = hash( 'ripemd160', $e) ;
   $s2 = substr( $s, -5 );
   echo "Hash of $e: " . hexdec( $s2 ) . "\n";
}
?>
Hash of I'm a dog: 147508
Hash of I'm a cat: 23112
Hash of I'm a car: 563887  <-- little change in string but big change in number
于 2012-07-16T20:14:51.453 回答
0

整数只能存储有限数量的数据,而字符串可能存储的数据远不止这些。如果您将字符串转换为整数,不知何故,它总是会与其他东西发生冲突(用两个词来说,它不是唯一的!)....最好选择其他东西(可能是加盐的 MD5?)!

于 2012-07-16T20:16:39.417 回答