字符串到数字生成器

时间:2013-03-15 16:02:36

标签: c# hash

我正在寻找一种将字符串转换为唯一ID的方法。

邀请一种算法的想法,该算法为发送给它的每个字符串提供唯一编号。

我尝试使用哈希码但后来意识到两个字符串可能具有相同的哈希码。

如何为每个字符串生成唯一代码作为输入,两个相同的字符串应始终生成相同的ID。

4 个答案:

答案 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%独特,但风险很低:

How are hash functions like MD5 unique?

答案 3 :(得分:0)

一个字符串可能相当长,由字符组成,这些字符是16位值。可能的字符串数量很大(远远超过整数或Guid的范围)。所以你不能拥有一个"只是"将字符串转换为一些保证唯一的代码,没有任何帮助。

您可以使用数据库表:在表中查找您的字符串。如果它不存在,请插入它,生成一个新的(顺序)唯一ID。如果它在那里,请使用该ID。可能的字符串数量很大,你遇到的字符串数量可能不大。