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

本文关键字:唯一 | 更新日期: 2023-09-27 17:49:48

我正在尝试编写一个服务,其中每个用户在第一次使用该服务时将被分配一个唯一的名称。我希望生成这个名称,而不是让用户设置它。此外,我希望名称具有一定的可读性和记忆性,而不是听起来像GUID或时间戳。从本质上讲,我希望它有点像Xbox游戏标签。

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

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

有什么建议吗?

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

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

这与我正在谈论的类似,除了它将整个单词概率地组合成句子。我更倾向于把字母组合成想象中的单词。

EDIT实际上这个页面讨论了我所说的

这只是一个完全解决您的问题的代码示例。如果这不能解决问题,请尽量在你的问题中更具体。给下面的方法传递一个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));
}

你可以使用这个10000个随机名字的列表:http://www.opensourcecf.com/1/2009/05/10000-Random-Names-Database.cfm

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

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

简单的方法(也非常可伸缩),但不安全。依赖于2个用户随机获得相同id的可能性。

我会尝试得到3或4个大约1000个模态的列表,然后在每个列表中随机选择一个值。这将产生大约10E12种可能性,足以避免1000个用户的碰撞。

JohnLampMartin2212