4 votes

Générer des noms uniques mais lisibles en C#

J'essaie d'écrire un service dans lequel chaque utilisateur se verra attribuer un nom unique, lors de sa première utilisation du service. Je souhaite générer ce nom, plutôt que de demander à l'utilisateur de le configurer. De plus, je veux que le nom soit quelque peu lisible et mémorable plutôt que de ressembler à un GUID ou à un timestamp. Essentiellement, je veux que ce soit quelque chose comme le gamertag Xbox.

Je sais qu'il n'y aura jamais plus de 1000 utilisateurs et que le maintien de l'unicité ne sera pas un problème (une autre raison pour laquelle je peux me permettre d'éviter les GUID).

Je pense prendre des adjectifs, des noms, etc. du dictionnaire et générer des combinaisons aléatoires mais uniques de ceux-ci.

Des suggestions ?

4voto

Drew Noakes Points 69288

Vous pourriez utiliser un corpus de n-grams de langue anglaise (par exemple des séquences de trois lettres) et les utiliser pour générer des mots qui ressemblent à de l'anglais, mais qui sont en fait du charabia. Ce type de données est essentiellement aléatoire, mais présente une certaine douceur pour la nature du langage humain et de la mémoire.

C'est similaire à ce dont je parle. sauf qu'il combine des mots entiers en phrases de manière probabiliste. Je pensais plutôt à le faire en composant des séquences de lettres en mots imaginaires.

EDITAR en fait cette page discute de ce dont je parle.

1voto

Eve Points 5891

Il s'agit simplement d'un exemple de code pour aborder pleinement votre problème. Si cela ne résout pas votre problème, essayez d'être plus précis dans votre question. Passez à la méthode suivante une instance de la classe System.Random classe et une liste de mots (votre dictionnaire).

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));
}

1voto

log0 Points 6367

Vous pouvez utiliser cette liste de 10 000 noms aléatoires : http://www.opensourcecf.com/1/2009/05/10000-Random-Names-Database.cfm

ou utilisez ce site web pour générer une liste aléatoire de prénoms : http://www.fakenamegenerator.com/order.php

En toute sécurité, conservez la liste des noms non utilisés restants.

Méthode simple (également très évolutive) mais peu sûre. Comptez sur l'improbabilité que deux utilisateurs obtiennent par hasard le même identifiant.

J'essaierais d'obtenir 3 ou 4 listes d'environ un millier de modalités, puis de choisir au hasard une valeur dans chaque liste. Cela ferait environ 10E12 possibilités, ce qui est suffisant pour éviter la collision pour 1000 utilisateurs.

JohnLampMartin2212

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X