我正在寻找将24个字符长的hex mongoDB对象ID转换为base62格式,以便它更短的URL。我不想从十六进制转换为整数然后转换为base62。是否有代码已经这样做了?
答案 0 :(得分:4)
This可以在任意碱基/字母之间进行转换。
如果您将其用于网址,请考虑使用Base58,因为人们可以更轻松地输入,而不会混淆类似外观的字符。
答案 1 :(得分:1)
因为64是16的倍数,所以最好的方法是使用查找表。任何三位十六进制数字都由两个base64数字表示,因此每个查找表中需要16³=64²= 4096个条目才能实现这一点。
我有一个perl脚本,可以在https://gist.github.com/3730664
生成映射我还有一个完整的生成和转换函数的实现(再次在perl中),我用它来转换MongoDB id,如果有用的话请告诉我。
编辑:我已将我正在使用的完整实现添加到上面链接的要点。
答案 2 :(得分:0)
节点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'
答案 3 :(得分:0)
请参阅下面的代码,用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;
}
}
答案 4 :(得分:0)
您可以使用lz-string压缩字符串。
我建议你使用他们的函数compressToBase64
进行压缩并decompressFromBase64
进行解压缩。
你可以使用他们的常规压缩&amp;解压缩函数但你的压缩字符串可能包含各种奇怪的中文字符。
您可以找到有关如何下载和使用lz-string here的指南。