2010-02-14 20 views
9

GUID est un grand nombre de nombres aléatoires dans une base HEX. Je veux montrer ce numéro dans un format plus court, disons que basé sur toutes les lettres et les chiffres. C'est une base de 36.Afficher un GUID au format 36 lettres

Disons que: 2f1e4fc0-81fd-11da-9156-00036a0f876a devient 3jEl9x6eZi.

Existe-t-il un algorithme «prêt» pour cela dans .Net?

il doit être bidirectionnel.

Modifier: en utilisant Base64 est encore meilleure solution. Le seul problème est Base64 contient / char qui n'est pas compatible pour utiliser dans URI.

+0

pour la base 64, vous pouvez remplacer des caractères non valides avec les valides (mais pas encore utilisés). IIRC, il y a un peu moins de 96 caractères ASCII imprimables. – Steve314

+0

Regardez ma réponse pour voir comment j'ai corrigé le problème ==,/et + – Fredou

Répondre

1

base64 est ce que je l'utilise, this va résoudre le problème avec == et/et +

2

Il est impossible que vous l'avez présenté. Vous auriez à perdre des informations:

>>> 16 ** len('2f1e4fc081fd11da915600036a0f876a') 
340282366920938463463374607431768211456 
>>> 36 ** len('3jEl9x6eZi') 
3656158440062976 

Vous auriez besoin beaucoup plus de base 36 chiffres pour couvrir toutes les valeurs possibles. Pourquoi ne pas simplement utiliser la base 64 à la place? Le résultat serait plus court (et je suppose que c'est le but ici) et il existe une solution standard pour cela dans .NET.

+0

La valeur '3jEl9x6eZi' est seulement par exemple, et ce n'est pas une valeur 'réelle'. –

0

Je pense que le plus proche que vous trouverez est Base36 mais il ne fonctionnera pas avec un type GIUD (seulement un Int16, Int32 ou Int64).

8

Il n'y a rien de construit pour une telle conversion. Quelque chose proche qui est construit en utilisant la base 64 est le codage:

string base64 = Convert.ToBase64String(theGuid.ToByteArray()) 
+0

Bonne solution. Mais pourquoi chaque chaîne se termine par '=='? '=' ce n'est pas une valeur valide au format Base64. –

+2

@Mendy: Le caractère = est utilisé pour remplir le dernier groupe de caractères. (Il est spécifié dans la norme RFC 1421.) – Guffa