日期:2014-05-18  浏览次数:20977 次

如何将 唯一的 GUID 计算称 唯一的 int数据
比方说, CSDN 的一个链接: 
http://forum.csdn.net/PointForum/Forum/PostTopic.aspx?forumID=e2798a59-79d5-4833-9c57-87d46a8b907a

这个链接后面:是一个长 Guid ——我也承认 Guid 稳定性高一些:至少比 自增列相比在导入导出数据方面优势一些!

——但是,无论是在 URL 中,还是 数据库中,还是处理时:你都会觉得 Guid 太长且不好用:


有没有一个算法,可以将 Guid 计算成一个 int ——这个 int 又可以反计算成这个 Guid ;

——我真的不怕数据转换的麻烦:但是真的很痛恨 Guid 的长度!!


即使不计算称 int 计算称一个新 字符串都可以:只要长度 不要太长,我能接受的是 10位长度;


------解决方案--------------------
既然需要这么麻烦,那你做的系统中,干脆完全不用guid得了.

用到guid的地方,全部使用int数值代替即可.
------解决方案--------------------
Guid g1 = Guid.NewGuid();
Guid g2 = Guid.NewGuid();

Console.WriteLine(g1.GetHashCode());
Console.WriteLine(g2.GetHashCode());
------解决方案--------------------
不可能双向转换,因为guid有128位,int只有32位,即使是long也只有64位,guid每一个位都用上了所以双向转换是不存在的,
------解决方案--------------------
这个真没有必要,GUID只是看起来不那么舒服而已,用习惯了也是一样的。一般GUID都是系统内部使用的,用户并不需要那么关心。
------解决方案--------------------
从理论上讲,都不可能,GUID总共可以有2的128次方种可能,而10位数字所能表示的个数远远小于这个数字,所以,根本就不现实。