如何把Guid编码并压缩用在URL中

0 投票
最新提问 1月 8, 2017 用户: 雨杰 (240 分)
修改于 1月 8, 2017 用户:雨杰

GUID类似这样42a31d61-d16c-4f13-b5a9-4c4f41315b95,我想把GUID的值用在URL上,如何把它压缩的短一点,并显示为友好的URL,类似这样0aamZWGct7y_ze4lIsj21w。

1个回答

0 投票
最新回答 1月 8, 2017 用户: snow (630 分)

GUID由32个十六进制数字组成,每个编码4比特,因此有效数据总共128位。
URL安全字符共69个,即:“A-Za-z0-9-_.!*()”,将GUID压缩,最简单的方法是利用base64。
base64字符分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。
如果用base64表示,每个符号6比特(2^6=64),可以把GUID压缩到22个字符,但是需要从base64字符列表中替换掉“+”和“/”。

//encode
Guid id = new Guid("42a31d61-d16c-4f13-b5a9-4c4f41315b95");
string base64 = Convert.ToBase64String(id.ToByteArray());
base64 = base64.Replace("+", "-").Replace("/", "_").TrimEnd(new char[] { '=' });
Console.WriteLine(base64);
   
//decode
string newbase64 = base64.Replace("-", "+").Replace("_", "/")
    .PadRight(base64.Length % 4 == 0 ? base64.Length : (base64.Length / 4 + 1) * 4, '=');
byte[] newbytes = Convert.FromBase64String(newbase64);
Guid newid = new Guid(newbytes);
Console.WriteLine(newid);
欢迎来到编程助手,编程方面有什么不懂的问题可以尽管在这里提问,你将会收到热心爱好者的回答。
...