4

最初にサービスを使用するときに、すべてのユーザーに一意の名前が割り当てられるサービスを作成しようとしています。ユーザーに設定してもらうのではなく、この名前を生成したいと考えています。また、GUID やタイムスタンプのように聞こえるのではなく、ある程度読みやすく覚えやすい名前にしたいと考えています。基本的に、これは Xbox ゲーマータグのようなものにしたいと考えています。

ユーザーが 1000 人を超えることは決してないので、一意性を維持することは問題になりません (GUID を避ける余裕があるもう 1 つの理由)。

辞書からいくつかの形容詞、名詞などを取得し、それらのランダムだが一意の組み合わせを生成することを考えています。

助言がありますか?

4

3 に答える 3

4

英語の n-gram (たとえば 3 つの文字列) のコーパスを使用して、英語のように見えるが実際には完全に意味不明な単語を生成することができます。この種のデータは本質的にランダムですが、人間の言語と記憶の性質には柔らかさがあります。

これは、単語全体を確率的に文に結合することを除いて、私が話していることと似ています。文字列を架空の言葉に構成することでそれを行うことをもっと考えていました。

編集実際、このページでは、私が話していることについて説明しています。

于 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

または、この Web サイトを使用して、名のランダムなリストを生成します: http://www.fakenamegenerator.com/order.php

安全な方法。残りの使用されていない名前のリストを維持します。

簡単な方法(非常にスケーラブルでもあります)ですが、安全ではありません。2 人のユーザーがランダムに同じ ID を取得する可能性は低いと考えてください。

約 1000 のモダリティの 3 つまたは 4 つのリストを取得してから、各リストからランダムに 1 つの値を選択しようとします。これにより、1000 ユーザーの衝突を回避するのに十分な 10E12 の可能性が生まれます。

ジョンランプMartin2212

于 2012-12-27T00:50:11.617 に答える