我正在寻找一种将字符串转换为唯一ID的方法。
邀请一种算法的想法,该算法为发送给它的每个字符串提供唯一编号。
我尝试使用哈希码但后来意识到两个字符串可能具有相同的哈希码。
如何为每个字符串生成唯一代码作为输入,两个相同的字符串应始终生成相同的ID。
答案 0 :(得分:3)
您的“唯一身份证”中是否有字符?如果是这样,这应该有用; - )
public string MakeUnique(string s)
{
return s;
}
所有ID都是所提供值的唯一ID。相同的字符串将生成完全相同的ID。这就是你想要的吗?
如果它是你想要的整数结果,那么如何将每个字符转换为int ...
public int MakeUnique(string s)
{
string result = "";
foreach(var c in s)
{
result += ((int)c).ToString();
}
return Int.Parse(result);
}
警告:如果字符串为too big
,则会中断答案 1 :(得分:2)
只需附加或添加指南:
string foo = "MyString";
//Simply throw it on the end
string uniqueString = foo + Guid.NewGuid();
//Prepend with underscore
string uniqueString = String.Format("{0}_{1}", foo, Guid.NewGuid());
//Append with underscore
string uniqueString = String.Format("{0}_{1}", Guid.NewGuid(), foo);
修改(新要求)
您没有提供足够的信息让我发布这个问题的好答案。例如,环境(网络,winforms等)将是有益的。
指出正确的方向......
如果第二次传入字符串时返回的唯一字符串必须相同,则可以维护生成字符串的历史记录,并在每次请求生成时检查它。
说实话,有很多方法可以给这只猫皮肤......
答案 2 :(得分:1)
如果原始字符串是敏感的,类似于Gravatar,则可以使用MD5 encryption加密字符串
如你所述,@Austin Salonen评论说,它们并非100%独特,但风险很低:
答案 3 :(得分:0)
一个字符串可能相当长,由字符组成,这些字符是16位值。可能的字符串数量很大(远远超过整数或Guid的范围)。所以你不能拥有一个"只是"将字符串转换为一些保证唯一的代码,没有任何帮助。
您可以使用数据库表:在表中查找您的字符串。如果它不存在,请插入它,生成一个新的(顺序)唯一ID。如果它在那里,请使用该ID。可能的字符串数量很大,你遇到的字符串数量可能不大。