在C#中生成唯一但可读的名称

时间:2012-12-27 00:27:25

标签: c#

我正在尝试编写一种服务,当他第一次使用该服务时,将为每个用户分配一个唯一的名称。我希望生成此名称,而不是让用户进行设置。此外,我希望该名称有点可读和令人难忘,而不是听起来像GUID或时间戳。基本上我希望它像Xbox gamertag。

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

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

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

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

This is similar to what I'm talking about,但它概率性地将整个单词组合成句子。我想通过将字母序列组合成想象的单词来更多地考虑它。

编辑实际上this page讨论了我在说什么。

答案 1 :(得分: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));
}

答案 2 :(得分: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