GUID介绍

  • Post author:
  • Post category:其他


GUID:即Globally Unique Identifier(全球唯一标识符)也称作UUID(Universally Unique Identifier 全局唯一标识符)。

GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指定产品的唯一性。

GUID主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符

GUID的主要目的是产生完全唯一的数字。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID的总数也足够大,达到了2128(3.4×1038)个,所以随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

格式:

GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个x是0-9或a-f范围内一个32位十六进制数

比如:6F9619FF-8F77-D881-B42D-00C04FC964FF即为有效的GUID值

如果用这个来生成System.Guid.NewGuid().ToString(“N”);

结果是一个32位字符串

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

如果用这个来生成System.Guid.NewGuid().ToString(“D”);

结果是一个连字符分隔32位字符串

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

如果用这个来生成System.Guid.NewGuid().ToString(“B”);

结果是一个在大括号中,由连字符分隔32位字符串

{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

如果用这个来生成System.Guid.NewGuid().ToString(“P”);

结果是一个在小括号中,由连字符分隔32位字符串

(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

C#代码

public ActionResult qt()
        {
            ViewBag.hh = Guid.NewGuid().ToString("B");
            return View();
        }
返回的结果是
{e4b54c0e-1e59-4a7b-ab00-efd69785e99f}

C#代码

public ActionResult qt()
        {
            ViewBag.hh = Guid.NewGuid().ToString("P");
            return View();
        }
返回的结果是
(770ed5f2-dc8e-4871-8da4-9cc74f6b4fad)

C#代码

public ActionResult qt()
        {
            ViewBag.hh = Guid.NewGuid().ToString("D");
            return View();
        }
返回的结果是
770ed5f2-dc8e-4871-8da4-9cc74f6b4fad

基本结构

GUID本质上是一个16字节(128位)的二进制数,最常见[1]的结构如下:

字节 描述 字节序
32 4 数据1 原生
16 2 数据2 原生
16 2 数据3 原生
64 8 数据4 大端序

数据4的字节序和GUID显示成文本的结果相同,而其它3个数据在小端序的机器(如英特尔的CPU)上必须先转换成大端序。

数据4的第二个字节的第1-3位表示所使用的GUID变种类型:

模式 描述
0 向后兼容网络计算系统
10 标准
110 向后兼容微软组件对象模型
111 保留至将来使用

数据3最高的4位表示版本号和所使用的算法。

Windows操作系统使用GUID来标识COM对象中的类和界面。一个脚本可以不需知道DLL的位置和名字直接通过GUID来激活其中的类或对象。

英特尔的全局唯一标识分区表使用GUID来标识硬盘和分区。

微软的ActiveX使用UUID来标识每一个不同的浏览器控件。

GUID已经广泛使用于数据库表格的主键。由于主键需要用作索引,于是就产生了一个性能问题:当主键足够随机时,新的记录就必须插入到原有的索引中间,而不能仅仅排在最后。

为缓解这个问题并仍然提供足够的随机程度以避免GUID的重复,人们就创造了一些新的算法来生成序列化的GUID。



版权声明:本文为weixin_44116816原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。