Кратчайшее кодирование Guid, гарантирующее уникальность - PullRequest
1 голос
/ 25 июня 2011

В настоящее время мы являемся base 64, кодирующими наши Guids, когда нам нужен уникальный URL.

Вопрос в том, можем ли мы пойти короче 22 символов, гарантируя уникальность?:

        var id = Guid.NewGuid().ToByteArray();
        var idString = Convert.ToBase64String(id)
            .Replace("=", "")
            .Replace("+", "-")
            .Replace("/", "_");

В настоящее время получится строка типа TwfQfblSTEuF7rLabS2bjA

Ответы [ 2 ]

3 голосов
/ 25 июня 2011

Base64 кодирует 6 бит на символ. Guid имеет 128 бит. Таким образом, вам нужно 128/6 = 21,33 символов. Дробное не умеет, 22 - жесткий нижний предел. Вы можете получить меньше символов только путем кодирования большего количества битов на символ. Это делает кодировку URL ужасной, я не могу придумать причину, почему вы захотите это сделать.

1 голос
/ 25 июня 2011

Только URL-символы (реальный ASCII, а не что-либо с байтами> = 128) допустимы в URL.Base64 уже достаточно близок к кратчайшему представлению URL для строки байтов, которую вы можете получить.Если вы хотите стать по-настоящему педантичным, вы сможете урезать одного или двух символов, используя все действительные символы URL вместо 64 (всего 80 с чем-то).

Я бы сказал, просто пойти с base64.Это достаточно близко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...