Направляю в кодировщик / декодер Base34 - PullRequest
1 голос
/ 06 января 2010

У кого-нибудь есть хороший фрагмент кода для кодера / декодера Guid to Base34, я уже гуглял по нему и никогда не нашел хороших источников.

Ответы [ 3 ]

2 голосов
/ 07 января 2010

Этот Класс преобразования чисел в C # может быть довольно легко расширен для выполнения base34 (или других, если вы думаете, что люди будут путать S и 5 или b и 6 или i и j или B и 8 или 9 и г или что угодно)

1 голос
/ 27 августа 2010

Вот упрощенная версия ... Она в основном берет строку, вычисляет хеш MD5, извлекает первые четыре байта как длинную без знака (эффективное отображение строки в 4-байтовое число), преобразует ее в base36 и затем меняет местами из символов «о» и «ноль» для «X» и «Y». Затем он гарантирует, что конечная строка будет состоять только из шести символов, при необходимости добавляя символы Z.

require 'digest/md5'

# create an easy-to-read 6-digit unique idno
idno = original # starting string
idno = Digest::MD5.digest(idno).unpack("N").first # digest as unsigned long
idno = idno.to_s(36).upcase.tr("0O","XY") # convert to base34 (no "oh" or "zero")
idno = idno[0,6].ljust(6,"Z") # final 6-digit unique idno (pad with "Z" chars)
0 голосов
/ 06 января 2010

Ключевые методы здесь ToByteArray и этот конкретный конструктор .

Код:

string encodedGuid = Convert.ToBase64String(guid.ToByteArray());

Decode:

Guid guid = new Guid(Convert.FromBase64String(encodedGuid));
...