4

我正在尝试编写一个服务,当每个用户第一次使用该服务时,他将被分配一个唯一的名称。我希望生成此名称,而不是让用户设置它。另外,我希望这个名称有点可读性和令人难忘,而不是听起来像 GUID 或时间戳。本质上,我希望这类似于 Xbox 玩家代号。

我知道永远不会有超过 1000 个用户,因此保持唯一性不会成为问题(我可以避免使用 GUID 的另一个原因)

我正在考虑从字典中提取一些形容词、名词等,并生成它们的随机但独特的组合。

有什么建议么?

4

3 回答 3

4

您可以使用英语 n-gram 语料库(例如三个字母序列)并使用它们来生成看起来像英语但实际上完全是胡言乱语的单词。这种数据本质上是随机的,但对人类语言和记忆的性质具有柔软性。

这与我正在谈论的类似,只是它将整个单词概率性地组合成句子。我更多地考虑通过将字母序列组合成虚构的单词来做到这一点。

编辑实际上这个页面讨论了我在说什么。

于 2012-12-27T00:49:14.967 回答
1

这只是一个完全解决您的问题的代码示例。如果它不能解决它,请尝试在您的问题中更具体。System.Random将类的实例和单词列表(您的字典)传递给以下方法。

static string GetGuid(Random random, IList<string> words)
{
    const int minGuidSize = 10;
    const int maxGuidSize = 15;
    var builder = new StringBuilder();
    while (builder.Length < minGuidSize)
        builder.Append(words[random.Next(words.Count)]);
    return builder.ToString(0, Math.Min(builder.Length, maxGuidSize));
}
于 2012-12-27T00:39:58.540 回答
1

您可以使用此 10 000 个随机名称列表: http ://www.opensourcecf.com/1/2009/05/10000-Random-Names-Database.cfm

或者使用这个网站生成一个随机的名字列表:http: //www.fakenamegenerator.com/order.php

安全的方式。维护剩余未使用名称的列表。

简单的方法(也非常可扩展)但不安全。依靠 2 个用户随机获得相同 id 的可能性。

我会尝试获取大约一千种模式的 3 或 4 个列表,然后在每个列表中随机选择一个值。这将产生大约 10E12 种可能性,足以避免 1000 个用户发生冲突。

JohnLampMartin2212

于 2012-12-27T00:50:11.617 回答