Показать GUID в формате 36 букв - PullRequest
9 голосов
/ 14 февраля 2010

GUID - это большое случайное число, отображаемое в HEX . Я хочу показать это число в более коротком формате, скажем, на основе всех букв и цифр. Это 36 основа.

Допустим, что: 2f1e4fc0-81fd-11da-9156-00036a0f876a станет как 3jEl9x6eZi.

Есть ли какой-нибудь готовый алгоритм для этого в .Net?

оно должно быть двунаправленным.

Редактировать: с использованием Base64 - еще лучшее решение. Единственная проблема - Base64 содержит / char, который не совместим для использования в URI .

Ответы [ 5 ]

13 голосов
/ 14 февраля 2010
8 голосов
/ 14 февраля 2010

Нет ничего встроенного для такого преобразования. Что-то близкое, что встроено, использует кодировку base 64:

string base64 = Convert.ToBase64String(theGuid.ToByteArray())
2 голосов
/ 14 февраля 2010

Это невозможно, как вы представили. Вам придется потерять информацию:

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

Вам понадобится еще много базовых 36 цифр, чтобы охватить все возможные значения. Почему бы просто не использовать базу 64 вместо этого? Результат будет короче (и я предполагаю, что это является целью здесь), и есть стандартное решение для этого в .NET.

1 голос
/ 14 февраля 2010

Base64 - это то, что я использую, это решит проблему с == и / и +

0 голосов
/ 14 февраля 2010

Я думаю, что наиболее близким является Base36 , однако он не будет работать с типом GIUD (только Int16, Int32 или Int64).

...