回答
是否有是多少?
你可以简单地散列字符串,它会给你一个独特的价值。
echo md5('any string in here');
注意:这是一个单向散列,它不能从散列转换回字符串。
这是如何口令通常存储(使用这个或其他散列函数,通常与一个“盐”的方法加入。)检查一个口令,然后通过散列输入并比较所存储的散列进行。
编辑:MD5散列的长度为32个字符。
看看其他散列函数:
http://us3.php.net/manual/en/function.crc32.php(返回一个数字,可能为负)
http://us3.php.net/manual/en/function.sha1.php(40个字符)
你正在寻找一个散列函数,如md5。您可能想要传递$ raw_output = true参数以访问原始字节,然后将它们转换为您希望编号输入的任何表示形式。
加密散列函数将为您提供每个输入字符串的不同编号,但它是一个相当大的数字 - 例如在SHA-1的情况下为20个字节。原则上,两个字符串可以产生相同的散列值,但发生这种情况的可能性非常小,因此可以忽略不计。
如果你想有一个较小的数字 - 比如,一个32位整数 - 然后,因为碰撞的概率太高,你不能使用的哈希函数。相反,您需要记录所有已建立的映射。制作一个将字符串与数字相关联的数据库表,并且每次给出字符串时,都要在表中查找它。如果您在那里找到它,请返回相关号码。如果没有,请选择一个未被任何现有记录使用的新号码,并将新的字符串和号码添加到表格中。
谢谢...我想我可以通过添加/附加我的字符串元素在散列的后面或前面来解决此问题.. – 2011-06-03 14:48:48
您可以使用散列函数一样md5,但是这是不是很有趣。
相反,您可以将字符串转换为其ASCII字符序列(因为您说它是字母数字) - 这样,它可以很容易地转换回来,对应字符串的长度(长度* 3是精确的),它具有0碰撞的机会,因为它只是它转向另一种表示,总是一个数字,这是一个更有趣...示例代码:
function encode($string) {
$ans = array();
$string = str_split($string);
#go through every character, changing it to its ASCII value
for ($i = 0; $i < count($string); $i++) {
#ord turns a character into its ASCII values
$ascii = (string) ord($string[$i]);
#make sure it's 3 characters long
if (strlen($ascii) < 3)
$ascii = '0'.$ascii;
$ans[] = $ascii;
}
#turn it into a string
return implode('', $ans);
}
function decode($string) {
$ans = '';
$string = str_split($string);
$chars = array();
#construct the characters by going over the three numbers
for ($i = 0; $i < count($string); $i+=3)
$chars[] = $string[$i] . $string[$i+1] . $string[$i+2];
#chr turns a single integer into its ASCII value
for ($i = 0; $i < count($chars); $i++)
$ans .= chr($chars[$i]);
return $ans;
}
例子:
$original = 'asdf1234';
#will echo
#097115100102049050051052
$encoded = encode($original);
echo $encoded . "\n";
#will echo asdf1234
$decoded = decode($encoded);
echo $decoded . "\n";
echo $original === $decoded; #echoes 1, meaning true
真的很有用..... :) ...有什么方法我可以更改'长度* 3'到'长度* 2'?我是一个初学者.. – 2011-06-04 16:51:53
@blasteralfred - 它的长度* 3,因为小写字母的ASCII值高于100,并且使其易于实现在大写ASCII表示之前附加0。我没有建议它是最佳的,只是有点有趣。 – Zirak 2011-06-04 18:12:14
号码?整数,浮点数,有符号/无符号?请明确点。 – 2011-06-03 14:34:05
为什么不散列这些字符串?这将为每个字符串提供不同的值。 – 2011-06-03 14:35:13
是的,具体而言,我正在寻找一个独特的ID解决方案,我发现号码/整数更方便,ñ我没关系哈希.. – 2011-06-03 14:39:07