шестнадцатеричное преобразование в базовое 62 для сокращения URL - PullRequest
1 голос
/ 24 марта 2012

Я хочу преобразовать 24-символьные шестнадцатеричные идентификаторы объекта mongoDB в формат base62, чтобы он был короче для URL.Я не хочу конвертировать из шестнадцатеричного в целое, а затем в base62.Есть ли код, который уже делает это?

Ответы [ 5 ]

4 голосов
/ 24 марта 2012

Этот может преобразовывать произвольные базы / алфавиты.

Рассмотрите возможность использования Base58, если вы используете его для URL-адресов, так как людям будет легче печатать, не путая аналогичныеищу персонажей.

1 голос
/ 16 сентября 2012

Поскольку 64 кратно 16, лучший способ сделать это с помощью справочной таблицы.Любая тройка шестнадцатеричных цифр представлена ​​двумя цифрами base64, поэтому для этого вам понадобится 16³ = 64² = 4096 записей в каждой справочной таблице.

У меня есть сценарий perl, который будет генерировать сопоставления в https://gist.github.com/3730664

У меня также есть полная реализация функций генерации и преобразования (опять же в perl), которые я использую для преобразования идентификаторов MongoDB, если это будет полезно, дайте мне знать.

Редактировать:Я добавил полную реализацию, которую я использую, в суть, приведенную выше.

0 голосов
/ 29 июня 2016

LZ-string

Вы можете использовать lz-string для сжатия ваших строк.

Я бы предложил вам использовать их функцию compressToBase64 для сжатия и decompressFromBase64 для распаковки.

Вы можете использовать их обычную функцию сжатия и распаковки, но ваша сжатая строка, вероятно, будет содержать все виды странных китайских символов.

Вы можете найти руководство по загрузке и использованию lz-строки. здесь .

0 голосов
/ 24 ноября 2014

Пожалуйста, смотрите код ниже, написанный на C #, преобразуйте логику в любой язык, который вы хотитеВы также можете изменить порядок или символы в пространстве имен, чтобы сделать преобразование уникальным для вас.

public static class ShortCodes
{
    private static Random rand = new Random();

    // You may change the "shortcode_Keyspace" variable to contain as many or as few characters as you
    // please.  The more characters that aer included in the "shortcode_Keyspace" constant, the shorter
    // the codes you can produce for a given long.
const string shortcode_Keyspace = "abcdefghijklmnopqrstuvwxyz0123456789";

    // Arbitrary constant for the maximum length of ShortCodes generated by the application.
const int shortcode_maxLen = 12;


    public static string LongToShortCode(long number)
    {
        int ks_len = shortcode_Keyspace.Length;
        string sc_result = "";
        long num_to_encode = number;
        long i = 0;
        do
        {
            i++;
            sc_result = shortcode_Keyspace[(int)(num_to_encode % ks_len)] + sc_result;
            num_to_encode = ((num_to_encode - (num_to_encode % ks_len)) / ks_len);
        }
        while (num_to_encode != 0);
        return sc_result;
    }


    public static long ShortCodeToLong(string shortcode)
    {
        int ks_len = shortcode_Keyspace.Length;
        long sc_result = 0;
        int sc_length = shortcode.Length;
        string code_to_decode = shortcode;
        for (int i = 0; i < code_to_decode.Length; i++)
        {
            sc_length--;
            char code_char = code_to_decode[i];
            sc_result += shortcode_Keyspace.IndexOf(code_char) * (long)(Math.Pow((double)ks_len, (double)sc_length));
        }
        return sc_result;
    }
}
0 голосов
/ 09 ноября 2012

узел int-encoder делает это

npm install int-encoder

var en = require('int-encoder');

//simple integer conversion
en.encode(12345678); // "ZXP0"
en.decode('ZXP0'); // 12345678

//convert big hex number using optional base argument
en.encode('e6c6b53d3c8160b22dad35a0f705ec09', 16); // 'hbDcW9aE89tzLYjDgyzajJ'
en.decode('hbDcW9aE89tzLYjDgyzajJ', 16); // 'e6c6b53d3c8160b22dad35a0f705ec09'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...