
GUID全球唯一标识符.doc
6页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 特 点★ GUID 在 空 间 上 和 时 间 上 具 有 唯 一 性 , 保 证 同 一 时 间 不 同 地 方 产 生 的 数字 不 同 ★ 世 界 上 的 任 何 两 台 计 算 机 都 不 会 生 成 重 复 的 GUID 值 ★ 需 要 GUID 的 时 候 , 可 以 完 全 由 算 法 自 动 生 成 , 不 需 要 一 个 权 威 机 构 来管 理 ★ GUID 的 长 度 固 定 , 并 且 相 对 而 言 较 短 小 , 非 常 适 合 于 排 序 、 标 识 和 存储 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 部 分 :程 序 ID:如 Access.Application 等 , 其 中 Access 表 示 类 所 在 DLL/EXE 文 件 名 , Application 是 类 的 名 称 虽 然 程 序 ID 较 类 ID 易 用 , 但 因 为 它 并不 一 定 是 唯 一 的 , 因 此 可 能 造 成 混 乱 在 VB 和 VJ++ 中 程 序 员 只 能 使 用 程序 ID, 不 过 这 两 种 语 言 允 许 程 序 ID 长 达 39 个 字 符 , 因 此 完 全 可 以 取 一 个 与 GUID 完 全 相 同 的 程 序 ID, 从 而 保 证 程 序 ID 也 是 唯 一 的 CLSID:在 这 个 子 键 下 列 出 了 在 机 器 上 注 册 过 的 所 有 类 ID 在 每 个 GUID键 下 可 以 找 到 所 有 关 于 这 个 类 ID 的 信 息 如 果 该 类 ID 对 应 一 个 DLL, 则DLL 文 件 名 在 InprocServer32 子 键 下 ; 如 果 是 本 地 的 一 个 EXE 程 序 , 则 文件 名 在 LocalServer32 子 键 下 ; 如 果 是 远 程 EXE, 则 有 一 个 AppID 子 键 指向 AppID 键 的 入 口 。
AppID:在 这 个 子 键 下 列 出 了 每 个 远 程 DLL/EXE 的 启 动 参 数 , 包 括 对 象位 置 、 文 件 名 等 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 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等·.NET 中使用 GUID 当 Windows 开发人员需要一个唯一数值时,他们通常使用到一个全局唯一标识符(GUID, Globally Unique Identifier)微软采用 GUID 术语来表示这一唯一数值,而这一数值能够标识一个实体,比如一个 Word 文档一个 GUID 为一个 128 位的整数(16 字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数这一篇文章将解释.NET 框架如何尽其最大潜力地为你建立自己的 GUID你所看到的GUIDs 被用于整个 Windows 环境当你在一个 Windows 系统中仔细阅读注册表时,你可以看到 GUIDs 被广泛用于唯一识别程序特别地,它们作为程序的 Ids 集中在HKEY_CLASSES_ROOT 部分(AppID 键)。
这就是一个典型的 GUID 的格式:936DA01F-9ABD-4d9d-80C7-02AF85C822A8在.NET 中生成一个 GUID处理一个唯一标识符使得存储和获得信息变得更加容易在处理一个数据库中这一功能变得尤其有用,因为一个 GUID 能够操作一个主键同 样,SQL Server 也很好地集成了 GUID 的用途SQL Server 数据类型uniqueidentifier 能够存储一个 GUID 数值你可 以通过使用 NEWID()函数在 SQL Server中生成这一数值,或者可以在 SQL Server 之外生成 GUID,然后再手动地插入这一数值在.NET 中,后面一种方法显得更加直接NET Framework 中的基本 System 类包括GUID 数值类型除此之外,这一数值类型包含了处理 GUID 数值的方法特别地,NewGUID 方法允许你很容易地生成一个新的 GUID以下的 C#命令行程序说明这一使用过程:using System;namespace DisplayGUID {class GuidExample {static void Main(string[] args) {Console.WriteLine("GUID: " + System.Guid.NewGuid().ToString());}} }下面为这一程序的输出:(虽然不同系统之间的 GUID 是变化的。
)GUID: 9245fe4a-d402-451c-b9ed-9c1a04247482在这一点上,你可以看到 GUID 是一个很好的功能,但在程序的什么地方使用到它们,并如何使用它们?在程序中使用一个 GUID一个 GUID 可以在后台数据库中操作一个主键以下代码使用一个 GUID 在一个后台数据库中存储信息,这一数据库包含以下的列:pk_guid—uniqueidentifier 数据类型name—nvarchar 数据类型这样出现一个包含文本框的简单 Windows 窗体当选择按钮时,文本框中的数据被插入到数据库中通过程序代码可以生成一个 GUID 并存储在其它列中:StringBuilder strSql = new StringBuilder();strSql.Append("Insert into cs_Content(");strSql.Append("Log_guid, Log_Title, Log_Content, Log_PostTime, Log_ViewNums)");strSql.Append(" values (");strSql.Append("@Log_guid,。
