我正在尝试编写一种服务,当他第一次使用该服务时,将为每个用户分配一个唯一的名称。我希望生成此名称,而不是让用户进行设置。此外,我希望该名称有点可读和令人难忘,而不是听起来像GUID或时间戳。基本上我希望它像Xbox gamertag。
我知道永远不会有超过1000个用户,因此保持唯一性不会成为问题(我可以负担得起避免GUID的另一个原因)
我正在考虑从字典中获取一些形容词,名词等,并产生随机但独特的组合。
有什么建议吗?
答案 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