C#如何将字符串转换为唯一ID

时间:2011-01-08 12:56:03

标签: .net

假设我们有字符串name =“stackoverflow.com”;

如何将此字符串int转换为唯一ID或某种Hash。 (没有md5,因为它太大了)而且它不应该是随机的

我希望有类似的东西

请注意字符串本身太大我想知道字符串是否可以写得更短。字母,数字和符号的组合

  

f¤k^§〜7D?Æ

4 个答案:

答案 0 :(得分:6)

如果不限制您的域名,这是不可能的。有无数的string s因此不能被映射到任何有限集中。因此,独特性是不可能的。

如果您确实需要string的唯一标识符,请使用string本身。

答案 1 :(得分:1)

name.GetHashCode()

这可能是你最好的选择。任何形式的哈希都是一个常见的问题,它不能仅仅是唯一的,但是通过允许哈希更长,你可以使它更有可能是唯一的。

您还可以将不同的哈希算法相互结合使用,以增加支持的范围

修改

然后你可以创建一个自定义的Hashcode函数,例如

public static int GetHashCode (string value )
{
int h = 0;
for (int i = 0; i < value.Length; i ++)
h += value [i] * 31 ^ value.Length - (i + 1);
return h;
}

(从其他地方偷来的)

答案 2 :(得分:1)

如果你使用哈希,它需要足够长才能是唯一的,并且可能比你想要的更长。 你需要2^(BitLength/2) >> n,其中BitLength是散列的长度,n是字符串的数量。

如果只使用Dictinary<string,int>和计数器呢?

答案 3 :(得分:0)

杰森是对的 - 你不能创建一个有限大小的字符串唯一散列,其大小可以任意长。我向你提交你所寻找的不是哈希,而是compression algorithm on short strings