136 votes

Identificateur unique court .NET

J'ai besoin d'un identifiant unique dans .NET (je ne peux pas utiliser le GUID car il est trop long pour ce cas).

Les gens pensent-ils que l'algorithme utilisé ici est un bon candidat ou avez-vous d'autres suggestions ?

147voto

Dor Cohen Points 5169

Celle-ci est bonne - http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx

et aussi ici GUID de type YouTube

Vous pourriez utiliser Base64 :

string base64Guid = Convert.ToBase64String(Guid.NewGuid().ToByteArray());

Cela génère une chaîne comme E1HKfn68Pkms5zsZsvKONw==. Comme un GUID est 128 bits, vous pouvez omettre le == qui, vous le savez, sera toujours présent à la fin et cela vous donnera une chaîne de 22 caractères. Ce site n'est pas aussi courte que celle de YouTube.

57voto

Jaime Points 840

J'utilise une approche similaire à celle de Dor Cohen, mais en supprimant certains caractères spéciaux :

var uid = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "");     

Ceci ne produira que des caractères alphanumériques. Il n'est pas garanti que les UIDs aient toujours la même longueur. Voici un exemple d'exécution :

vmKo0zws8k28fR4V4Hgmw 
TKbhS0G2V0KqtpHOU8e6Ug 
rfDi1RdO0aQHTosh9dVvw
3jhCD75fUWjQek8XRmMg 
CQUg1lXIXkWG8KDFy7z6Ow 
bvyxW5aj10OmKA5KMhppw
pIMK8eq5kyvLK67xtsIDg
VX4oljGWpkSQGR2OvGoOQ 
NOHBjUUHv06yIc7EvotRg
iMniAuUG9kiGLwBtBQByfg

51voto

adeel41 Points 569
var ticks = new DateTime(2016,1,1).Ticks;
var ans = DateTime.Now.Ticks - ticks;
var uniqueId = ans.ToString("x");

Gardez une date de référence (qui dans ce cas est le 1er janvier 2016) à partir de laquelle vous commencerez à générer ces identifiants. Vos identifiants seront ainsi plus petits.

Numéro généré : 3af3c14996e54

36voto

BozoJoe Points 1136

Paquet simple et utilisable. Je l'utilise pour le générateur d'identifiants de requêtes temporelles.

https://www.nuget.org/packages/shortid

https://github.com/bolorundurowb/shortid

Utilisations System.Random

string id = ShortId.Generate();
// id = KXTR_VzGVUoOY

(d'après la page github)

Si vous voulez contrôler le type d'identifiant généré en précisant si vous voulez des chiffres, des caractères spéciaux et la longueur, appelez la méthode Generate et passez trois paramètres, le premier étant un booléen indiquant si vous voulez des chiffres, le second un booléen indiquant si vous voulez des caractères spéciaux, le dernier un nombre indiquant votre préférence pour la longueur.

string id = ShortId.Generate(true, false, 12);
// id = VvoCDPazES_w

12voto

Christian Specht Points 15907

Pour autant que je sache, le simple fait de supprimer une partie d'un GUID ne garantit pas l'unicité. - En fait, elle est loin d'être unique.

La chose la plus courte que je connaisse qui garantisse l'unicité globale est présentée dans ce billet de blog de Jeff Atwood . Dans l'article en lien, il discute de plusieurs façons de raccourcir un GUID et finit par le réduire à 20 octets par le biais de Encodage Ascii85 .

Toutefois, si vous avez absolument besoin d'une solution qui ne dépasse pas 15 octets, je crains que vous n'ayez pas d'autre choix que d'utiliser quelque chose qui n'est pas garanti comme étant globalement unique.

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