使用Base64编码来缩短GUID字符串
来源:互联网 发布:鲁大师 硬件体检 优化 编辑:程序博客网 时间:2024/04/30 11:57
转自 【Chris】
有时候我们会使用GUID来作为数据库的主键,但是我觉得GUID字符串实在有点儿长,最近发现一种方法可以使GUID变短——变短了还是GUID吗?实际上这个变短是“变身”,尽管外貌变了,内心还是没有变的嘛。
Base64通常表示一种计算机编码方式,在电子邮件传输中经常可以看到。我的理解是Base64编码是一种使用“常规”字符集来表示二进制数据的方式,与其他BaseXX的编码方式一样,通常用N个字符来表示一个字节的数据。
那Base64和GUID有什么关系呢?其实没什么关系,只是通过将GUID进行Base64编码之后可以缩短GUID的长度。我想Base64编码之后的GUID就是GUID二进制的字符表现形式。
public static string Shrink(this Guid target) { Check.Argument.IsNotEmpty(target, "target"); string base64 = Convert.ToBase64String(target.ToByteArray()); string encoded = base64.Replace("/", "_").Replace("+", "-"); return encoded.Substring(0, 22); }
通过上面的函数可以将一个GUID转变为一个长度为22的字符串。并且这种转换是可逆的:
public static Guid ToGuid(this string target) { Guid result = Guid.Empty; if ((!string.IsNullOrEmpty(target)) && (target.Trim().Length == 22)) { string encoded = string.Concat(target.Trim().Replace("-", "+").Replace("_", "/"), "=="); try { byte[] base64 = Convert.FromBase64String(encoded); result = new Guid(base64); } catch(FormatException) { } } return result; }
通过上面的函数可以将一个Base64编码过的字符串转回GUID。
当然应该是可逆,否则电子邮件通过Base64编码之后不能转换回来,麻烦就大啦,哈哈。
GUID长度为16位,128比特,Base64一个字符表示6比特,因此base64编码之后的字符串会比GUID的字符串短。不过我不知道为什么GUID的字符串会有那么长?可能32位字符有些是“补零”吧?要知道,如果将字符串编码为Base64字符串,长度会增加——而上面的函数不是编码“字符串”而是直接编码“二进制数组”。这似乎也说明了GUID字符串有类似“补零”的操作?
- 使用Base64编码来缩短GUID字符串
- 字符串的编码Base64
- 字符串base64编码
- 使用混合脚本编程来实现的Base64编码
- 使用图片的base64编码字符串压缩图片代码
- 使用 apache 对 字符串进行base64编码解码
- Java使用Base64编码
- 使用BASE64编码解码
- 使用base64编码
- 使用base64编码
- Base64编码和解码字符串
- php 字符串 base64编码判断
- Java中使用Base64编码
- 为什么要使用base64编码
- OpenSSL 使用 base64 编码/解码
- 使用base64编码的好处
- c# base64图片编码使用
- Java Base64编码使用介绍
- svnX make sure the svn binary is present in the folder
- java多线程,MultpleThread
- 数据库基础--Transact-SQL 编程基础
- css表格自动换行
- 钱币兑换
- 使用Base64编码来缩短GUID字符串
- 成绩处理 项目2
- paip.提升性能---并行多核编程哈的数据结构list,set,map
- 纯虚函数也可以有函数体
- 数据库基础--游标
- iOS 邮箱验证
- 在jvm5.0上垃圾回收调优(1)
- Qt下 汉字转换拼音
- 字符串统计