柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
posts - 232, comments - 984, trackbacks - 17, articles - 29
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

关于GUID

Posted on 2004-09-11 15:20 柚子Nan 阅读(5955) 评论(20)  编辑 收藏 所属分类: [技术.Net]

今天在拜读Martin Fowler的著作《企业应用架构模式》,恰巧我们的开发使用微软的5层架构模式,很多东西有点感觉,不知道是自己的水平提高了,还是Martin Fowler他老人家的说话特别适合我的口味,呵呵,总之看着很爽。这种感觉与当初读《重构》的时候略有相同。

 

在书中提到了GUID,作者说:“GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUIDAPI。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字GUID的唯一缺陷在于生成的结果串会比较大。”


//  .net 中使用GUID
private void Button1_Click(object sender, System.EventArgs e)
        
{
            
// new a GUID
            this.TextBox1.Text = System.Guid.NewGuid().ToString();
        }

 

 

另外,我借鉴了网上的一些看法:

1.         一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。

 

2.         GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 0-9 a-f 范围内的一个十六进制的数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即为有效的 GUID 值。

 

3.         世界上(Koffer注:应该是地球上)的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

 

4.         Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

 

对于GUID各个部分的含义哪个知道他们的具体含义?或者提供一点什么参考?

Feedback

#1楼    回复  引用    

2004-09-11 16:09 by rIPPER [未注册用户]
这个含义有什么用处哩?你想自己实现生产guid的算法?

#2楼    回复  引用    

2004-09-11 16:53 by 小春 [未注册用户]
GUID也会重复的吧?
一台机器,我需要上传图像并重新命名,如果使用GUID,我怕我会生成相同的文件名(有没有可能?)
http://blog.joycode.com/moslem/archive/2004/03/23/16930.aspx

#3楼    回复  引用  查看    

2004-09-11 16:58 by 柚子Nan      
to rIPPER: 想看看GUID的原理。
如果你有相关的资料,共享一下,呵呵

#4楼    回复  引用  查看    

2004-09-11 17:00 by 柚子Nan      
to 小春:
按照理论(在同一时空中的所有机器都不会重复)。我觉得一定不会重复的,因为从一点他的纳秒级的数字System.Date.Now.Millsecond这个数字你看看,每次都不一样。,就可以解决:“我需要上传图像并重新命名”,而且还有很多有意义的数字呢!放心使用。

#5楼    回复  引用    

2004-09-11 17:16 by 小春 [未注册用户]
我最早以前也是用GUID,但也怕会有重复,所以我后来使用了年月日~毫秒,这样子还是会出现重复的文件名,后来在毫秒上又进行了五位的随机数,这样才解决了重复的问题。
我的要求:
在一个网站,可以连续上传十张图像(在一秒内十张图像部完成上传并重命名,)整个网站可能在同一时间有几十位用户也在上传,每人上传十张图像,全部在三秒内完成上传成功
:)

#6楼    回复  引用  查看    

2004-09-11 17:21 by 柚子Nan      
既然你有这么好的一个机会,可以试试看,说不定可以推翻这个GUID的神话呢!呵呵。有结论,记得同志大家啊?

#7楼    回复  引用    

2004-09-11 19:30 by Threading [未注册用户]
要说完全不可能重复是不现实的。但是用排列组合的乘法原理算一下就知道,GUID 的值有 2的128次方 个,所以有重复真的很难。

#8楼    回复  引用    

2004-09-11 20:26 by JGTM'2004 [MVP] [未注册用户]
@小春:

Windows 2000之后的系统从安全性角度出发已经改为使用密码学中的随机数生成器(RND Generator)来生成GUID了——从实用(而不是学术)的角度看,你完全不必担心重复的问题——尤其是在你对生成不重复随机数的“低”要求下。:)

#9楼    回复  引用  查看    

2004-09-13 08:59 by Cure      
GUID不可能重复应该还是统计学意义上的,实际情况中不排除出现重复的情况

#10楼    回复  引用    

2004-09-16 16:18 by 莫生气 [未注册用户]
     拜读Martin Fowler的著作《企业应用架构模式》,居然也能考虑到这个问题。

#11楼    回复  引用    

2004-09-20 21:01 by sywr [未注册用户]
有《企业应用架构模式》电子版吗?共享一下。
e-mai :sywrwwg@163.coml

#12楼 [楼主]   回复  引用  查看    

2004-09-21 08:38 by 柚子Nan      
没有电子版的,不好意思!

#13楼    回复  引用    

2004-10-05 12:45 by test [未注册用户]
// .net 中使用GUID
private void Button1_Click(object sender, System.EventArgs e)
{
// new a GUID
this.TextBox1.Text = System.Guid.NewGuid().ToString();
}

#14楼    回复  引用    

2005-03-01 12:21 by ddouble [未注册用户]
在每秒产生一万亿个GUID的情况下,即使太阳变成白矮星的时候他仍然是全球唯一。

#15楼    回复  引用    

2007-09-13 16:25 by shuima [未注册用户]
Thanks a million

#16楼    回复  引用    

2007-11-09 17:50 by 菜B [未注册用户]
肯定不可能重复,就好像这样:"一个人不可能在同一时间干同一件事情",是这样的吗
?

#17楼    回复  引用  查看    

2007-12-21 09:41 by 邓林海      
对,同一台机器不可能同一时间做同一件事,就这么简单。网卡号标识它是唯一的,时间你应该认同没有相同吧,嘻嘻。 over

#18楼    回复  引用    

2008-01-25 16:45 by 汪江涛 [未注册用户]
首先GUID是不用担心会重复的,比你用时分秒再加随机数还要安全,但不是说它不会重复,GUID的生成是与网卡的硬编号(这个是人为规定不重复的,全球的网卡厂商协定好了,不会有两个合法的网卡编号一样)和当前时间关联的,好像还有一个其它的因子,如果机器没有网卡,一般系统要提供一种机制来生成一个随机的编号替代,这也就是说一台机器上生成的GUID是“永远”不会重的,当然如果你生成了(2的32次方)那么多个GUID,他一定重复了很多次了,只要你有时间。不考虑没有网卡的情况,全球的GUID也不太可能重的,如果全世界的机器每秒各产生一个GUID,大概能保证几十年不重复。

#19楼    回复  引用  查看    

2008-05-04 14:59 by KevinDiao      
不用担心重复

#20楼    回复  引用    

2008-07-08 19:29 by 小鱼儿游游 [未注册用户]
并发执行不知道会不会重复!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: