全球唯一标识GUID
一.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相关推荐
- 全球唯一标识符:GUID在线生成
全球唯一标识符:GUID在线生成 转载于:https://www.cnblogs.com/LittleTiger/p/8297996.html
- idmp用户唯一标识图计算模拟演示
idmp用户唯一标识 需求出现原因: 现在一般网站所有账号登陆,账号就是用户的唯一标识 但是部分网站也存在一些以游客模式进行浏览消费的事件, 这个时候就需要利用**图计算(graphx)**的方法计算 ...
- SqlServer的NEWID()函数巧用,生成GUID作为唯一标识用
场景 在进行开发过程中如果需要唯一标识的GUID(全局唯一标识符). 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符 ...
- Android 10 + 适用于国内各大手机厂商的开放匿名设备标识(OAID),若不支持OAID则随机生成一个全局唯一标识(GUID)
源码见:https://github.com/gzu-liyujiang/Android_CN_OAID 本项目用于获取国内各大Android手机厂商的开放匿名设备标识(OAID).遵循谷歌官方使用A ...
- java开发_UUID(Universally Unique Identifier,全局唯一标识符)和GUID(Globally Unique Identifier,全球唯一标识符)...
GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . 所以GUID就是UUID. G ...
- 网游服务器中的GUID(唯一标识码)实现-基于snowflake算法
本文中的算法采用twitter的snowflake算法,具体请搜索介绍,原来是用Scala写的,因我项目需要,改写成C++语言,主要用于高效的生成唯一的ID, 核心算法就是毫秒级时间(41位)+机器I ...
- sqlserver 中的GUID 全局唯一标识 -摘自网络
--简单实用全局唯一标识 DECLARE @myid uniqueidentifier SET @myid = NEWID() PRINT 'Value of @myid is: '+ CONVERT ...
- GUTI,Globally Unique Temporary UE Identity,全球唯一临时UE标识。
在LTE网络中唯一标识UE,可以减少IMSI.IMEI等用户私有参数暴露在网络传输中.GUTI由核心网分配,在attach accept, TAU accept, RAU accept等消息中带给UE ...
- python namespace unique_Python使用uuid库生成唯一标识ID
uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现.有时也称guid(global unique identifier). ...
最新文章
- 权限设计的一些想法和思考
- 3780mysql_MySQL添加外键Foreign Keys出错,报错[HY000][3780]
- echarts柱状图x轴文字换行_深入 echarts 如何设置 Label / axisLabel 换行及自定义格式 / 自定义样式? 结合 canvas 如何实现文字换行来理解...
- 在微信小程序的JS脚本中使用Promise来优化函数处理
- oracle 批量读,Oracle批量读取数据和批量绑定
- php订阅号借权,php订阅号借权
- unity2D人物和物体的碰撞设置
- Python中的split()和rsplit()的使用
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
- 【Django 2021年最新版教程34】python unittest 对函数单元测试 覆盖率检测
- android5.0电话录音,用Xpose完美实现电话录音,支持android 8.1.0
- 计算机水利工程制图教程,《水利工程制图》.pdf
- SAP 如何保证同一销售业务产生的收入和成本计入相同的会计期间?
- 指纹图像方向图matlab,基于Matlab实现的指纹图像细节特征提取
- MacM1安装homebrew步骤
- 递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
- 今日头条最新_signature
- 目睹太多读博惨案之后,清华姚班助理教授写了个读博决策树
- 1035: 分段函数求值 C语言
- 智能公交站牌系统解决方案
热门文章
- react.JS并非完全开源,百度、Wordpress等带头弃之
- 游戏CFHD,狙可不是随便就起的,狙击的作用是辅助
- 我的Go+语言初体验——【四、版本更新环境变量配置】
- SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
- RMAN备份及恢复归档日志的语法
- oracle的命名规则
- Undo TableSpace ②.回滚段研究
- [转]Oracle执行计划的相关概念
- python中的浅拷贝与深拷贝——copy()
- 疯狂秀才权限管理系统,开源了