一.GUID概念

GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。

二.GUID格式

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。(8-4-4-4-12)例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

三.GUID特点

1.GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。  
    2.世界上的任何两台计算机都不会生成重复的 GUID 值。 
    3.需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。  
    4.GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

四.GUID优缺点

1.优点

同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。

便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。

便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而 uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。

便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。
2) 缺点

GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的,所以使用时要注意场合,最好不要尝试用它来作为你的电子邮件地址 J

GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

五.GUID争议

由于GUID值产生的潜在弊端已经引起了保密性提倡者的关注。1999年3月,美国联邦商务委员会接到要求,对微软的GUID值使用进行调查。争议主要涉及Office 97和Office 2000文档对GUID值的使用。Office文档,如Word文件或Excel电子数据表,所使用的GUID值对用户是不可见的。但有很多报道宣称,文档的作者是可以通过GUID值的跟踪查到的,即使作者已经采用特殊方法,他们还是可以被追踪到。 为了回应上述问题,微软已经发布了一个Office 97修补版SR2,它禁止了GUID功能的使用,并且还可以将现存文档的GUID去除。  
      潜在的对Intel处理器序列号滥用的问题与上述GUID值的问题本质是一样的。

在 API 参数中,需要给出的往往不是类或者 DLL/EXE 文件的真是名称,而是使用他们的 GUID(全局统一ID)。GUID 是微软对 UUID(统一唯一标识)的解释,理论上在整个空间和时间维上是唯一的,因此使用 GUID 来代替真实名称,可以防止系统中有两个相同名称的对象而造成混淆。 
      一个 GUID 是一个128位长(16字节)的数,形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中前4字节为随机数;5-8字节为时间戳,记录了从1490年开始到该GUID的生成时间(低16位字在前,以分钟为单位),从而保证了时间上的唯一;9-10字节与机器重启次数有关;最后6字节一般为该机器的网卡地址(如果这台机器没有网卡,则使用另一常数),从而保证了空间上的唯一。 
      在系统中,GUID 保存在注册表(运行→regedit)的 HKEY_CLASSES_ROOT 项下。HKEY_CLASSES_ROOT 其实是 HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\ 的快捷键,里面有很多长长的字串命名的子项,这些字串就是 GUID。在 HKEY_CLASSES_ROOT 下的 GUID 又分为4部分:

1.程序ID

如 Access.Application 等,其中 Access 表示类所在 DLL/EXE 文件名,Application 是类的名称。虽然程序ID较类ID易用,但因为它并不一定是唯一的,因此可能造成混乱。在 VB 和 VJ++ 中程序员只能使用程序ID,不过这两种语言允许程序ID长达39个字符,因此完全可以取一个与 GUID 完全相同的程序ID,从而保证程序ID也是唯一的。

2.CLSID

在这个子键下列出了在机器上注册过的所有类ID。在每个GUID键下。可以找到所有关于这个类ID的信息。如果该类ID对应一个DLL,则DLL文件名在 InprocServer32 子键下;如果是本地的一个EXE程序,则文件名在 LocalServer32 子键下;如果是远程EXE,则有一个 AppID 子键指向 AppID 键的入口。

3. AppID

在这个子键下列出了每个远程 DLL/EXE 的启动参数,包括对象位置、文件名等。

4.Interface

在这个子键下列出了本地系统中所有注册过的类的 GUID。在其中每个 GUID 键下,都保存着代理的类ID,当其他应用程序要与它通信时就使用这个ID传入传出参数

小结:

GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生成的结果串会比较大。” 
 
1. 一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。 
 
2. GUID 的 格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的 数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即为有效的 GUID 值。 
 
3. 世界上任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。 
 
4. 在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

转载于:https://www.cnblogs.com/arxk/p/5538551.html

全球唯一标识GUID相关推荐

  1. 全球唯一标识符:GUID在线生成

    全球唯一标识符:GUID在线生成 转载于:https://www.cnblogs.com/LittleTiger/p/8297996.html

  2. idmp用户唯一标识图计算模拟演示

    idmp用户唯一标识 需求出现原因: 现在一般网站所有账号登陆,账号就是用户的唯一标识 但是部分网站也存在一些以游客模式进行浏览消费的事件, 这个时候就需要利用**图计算(graphx)**的方法计算 ...

  3. SqlServer的NEWID()函数巧用,生成GUID作为唯一标识用

    场景 在进行开发过程中如果需要唯一标识的GUID(全局唯一标识符). 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符 ...

  4. Android 10 + 适用于国内各大手机厂商的开放匿名设备标识(OAID),若不支持OAID则随机生成一个全局唯一标识(GUID)

    源码见:https://github.com/gzu-liyujiang/Android_CN_OAID 本项目用于获取国内各大Android手机厂商的开放匿名设备标识(OAID).遵循谷歌官方使用A ...

  5. java开发_UUID(Universally Unique Identifier,全局唯一标识符)和GUID(Globally Unique Identifier,全球唯一标识符)...

    GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . 所以GUID就是UUID. G ...

  6. 网游服务器中的GUID(唯一标识码)实现-基于snowflake算法

    本文中的算法采用twitter的snowflake算法,具体请搜索介绍,原来是用Scala写的,因我项目需要,改写成C++语言,主要用于高效的生成唯一的ID, 核心算法就是毫秒级时间(41位)+机器I ...

  7. sqlserver 中的GUID 全局唯一标识 -摘自网络

    --简单实用全局唯一标识 DECLARE @myid uniqueidentifier SET @myid = NEWID() PRINT 'Value of @myid is: '+ CONVERT ...

  8. GUTI,Globally Unique Temporary UE Identity,全球唯一临时UE标识。

    在LTE网络中唯一标识UE,可以减少IMSI.IMEI等用户私有参数暴露在网络传输中.GUTI由核心网分配,在attach accept, TAU accept, RAU accept等消息中带给UE ...

  9. python namespace unique_Python使用uuid库生成唯一标识ID

    uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现.有时也称guid(global unique identifier). ...

最新文章

  1. 权限设计的一些想法和思考
  2. 3780mysql_MySQL添加外键Foreign Keys出错,报错[HY000][3780]
  3. echarts柱状图x轴文字换行_深入 echarts 如何设置 Label / axisLabel 换行及自定义格式 / 自定义样式? 结合 canvas 如何实现文字换行来理解...
  4. 在微信小程序的JS脚本中使用Promise来优化函数处理
  5. oracle 批量读,Oracle批量读取数据和批量绑定
  6. php订阅号借权,php订阅号借权
  7. unity2D人物和物体的碰撞设置
  8. Python中的split()和rsplit()的使用
  9. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
  10. 【Django 2021年最新版教程34】python unittest 对函数单元测试 覆盖率检测
  11. android5.0电话录音,用Xpose完美实现电话录音,支持android 8.1.0
  12. 计算机水利工程制图教程,《水利工程制图》.pdf
  13. SAP 如何保证同一销售业务产生的收入和成本计入相同的会计期间?
  14. 指纹图像方向图matlab,基于Matlab实现的指纹图像细节特征提取
  15. MacM1安装homebrew步骤
  16. 递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
  17. 今日头条最新_signature
  18. 目睹太多读博惨案之后,清华姚班助理教授写了个读博决策树
  19. 1035: 分段函数求值 C语言
  20. 智能公交站牌系统解决方案

热门文章

  1. react.JS并非完全开源,百度、Wordpress等带头弃之
  2. 游戏CFHD,狙可不是随便就起的,狙击的作用是辅助
  3. 我的Go+语言初体验——【四、版本更新环境变量配置】
  4. SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
  5. RMAN备份及恢复归档日志的语法
  6. oracle的命名规则
  7. Undo TableSpace ②.回滚段研究
  8. [转]Oracle执行计划的相关概念
  9. python中的浅拷贝与深拷贝——copy()
  10. 疯狂秀才权限管理系统,开源了