生成唯一随机字符串

109

我希望生成类似于MSDN库(Error Object)创建的随机唯一字符串,例如't9zk6eay'。


1
尝试使用以下代码:string randoms = Guid.NewGuid().ToString().Replace("-", string.Empty).Replace("+", string.Empty).Substring(0, 4); 更多相关信息请参见此处 - Shaiju T
1
要使某物完全独特,它必须基于一些非随机的东西,比如时间、位置等,因此实际上永远不可能是完全随机的。Guid看起来可能是随机的,但实际上并不是。在我看来,你唯一的希望就是使它如此随机和复杂,以至于在所有实际情况下,这些值都将是独特的(即具有极低的碰撞概率)。 - bytedev
13个回答

0

这个问题已经被针对各种语言提出过。这里有一个关于密码的问题,同样适用于这里。

如果你想要将字符串用于URL缩短,你还需要使用Dictionary<>或数据库检查以查看生成的ID是否已经被使用过。


-1

使用GUID哈希码获取唯一密钥

public static string GetUniqueKey(int length)
{
    string guidResult = string.Empty;

    while (guidResult.Length < length)
    {
        // Get the GUID.
        guidResult += Guid.NewGuid().ToString().GetHashCode().ToString("x");
    }

    // Make sure length is valid.
    if (length <= 0 || length > guidResult.Length)
        throw new ArgumentException("Length must be between 1 and " + guidResult.Length);

    // Return the first length bytes.
    return guidResult.Substring(0, length);
}

这个程序完美运行,但随机单词不包含唯一字符。字符重复出现,例如114e3(两个1),eaaea(三个a和两个e),60207(两个0)等等。如何生成一个没有重复字符的随机字符串,包含字母数字组合? - vijay
@vijay:由于它输出十六进制数字,您将自己限制在16个字符和16!可能的输出上。随机字符串就是这样,随机的。理论上,您可以获得所有a的字符串(aaaaaaaaaaaaaaa)。这很不可能,但与任何其他随机字符串一样。我不确定为什么您需要这种约束,但是当您向字符串添加字符时,请将它们放入HashSet<T>中,检查其存在性,并相应地将它们添加到字符串或跳过它们。 - Chris Doggett

-1
  • 不确定 Microsoft 的链接是否是随机生成的
  • 可以尝试使用 new Guid().ToString() 查看一下

4
你的意思是Guid.NewGuid().ToString() - Guid没有公共构造函数。 - cjk
3
你可能是对的,打字时没有核实。我相信原帖作者表达了他的观点。 - Fabian Vilers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接