2010-11-24 39 views
0

Dans mon application Web, un modèle utilise l'identificateur généré par un outil UUID. Comme je veux que cet identifiant fasse partie de l'URL, j'étudie des méthodes pour raccourcir cette chaîne d'UUID. Comme il est actuellement en format hexadécimal, j'ai pensé à le convertir en ASCII. Comme il ne devrait ensuite contenir que des caractères normaux et un nombre ([\ d \ w] +), la conversion hexadécimale ASCII normale ne semble pas fonctionner (caractères moche). Connaissez-vous un algorithme ou un outil (Ruby) pour le faire?Rendre l'UUID plus court (conversion hexadécimal en ASCII)

+0

Fait amusant: un uuid encodé en base64 a une longueur de 22 caractères + deux caractères de remplissage ('=='). La représentation hexadécimale standard d'un uuid est de 32 caractères + 4 '-' caractères. – Seth

+0

Vous pouvez enregistrer deux caractères supplémentaires avec l'encodage base85 modifié depuis http://tools.ietf.org/html/rfc1924 (les adresses IPv6 sont également 128 bits, commodément); son jeu de caractères n'est pas entièrement sûr pour les URL, mais je pense que vous pourriez corriger cela si vous le vouliez vraiment. – zwol

Répondre

3

Un UUID est un nombre binaire de 128 bits, à la fin. Si vous le représentez en tant que 16 octets non codés, il n'y a aucun moyen d'éviter les "caractères laids". Ce que vous voulez probablement faire est de le décoder à partir de l'hexagone, puis de l'encoder en utilisant base64. Notez que l'encodage base64 utilise les caractères +/= ainsi que A-Za-z0-9, vous voudrez faire un peu de post-traitement (je suggère s/+/-/g; s/\//_/g; s/==$// - un UUID base64ed se terminera toujours par deux signes égaux)