GUID介绍
来源:互联网 发布:双色球九宫图算法杀号 编辑:程序博客网 时间:2024/06/06 00:00
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。
在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。
在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。
格式
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个4位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。
★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
★GUID理论上能产生全球唯一的值,对于以后的数据导入很方便。
由于GUID值产生的潜在弊端已经引起了保密性提倡者的关注。1999年3月,美国联邦商务委员会接到要求,对微软的GUID值使用进行调查。争议主要涉及Office 97和Office 2000文档对GUID值的使用。Office文档,如Word文件或Excel电子数据表,所使用的GUID值对用户是不可见的。但有很多报道宣称,文档的作者是可以通过GUID值的跟踪查到的,即使作者已经采用特殊方法,他们还是可以被追踪到。 为了回应上述问题,微软已经发布了一个Office 97修补版SR2,它禁止了GUID功能的使用,并且还可以将现存文档的GUID去除。
潜在的对Intel处理器序列号滥用的问题与上述GUID值的问题本质是一样的。
VB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option
Explicit
Private
Type GUID
Data1
As
Long
Data2
As
Integer
Data3
As
Integer
Data4(8)
As
Byte
End
Type
Private
Declare
Function
CoCreateGuid
Lib
"ole32.dll"
(pguid
As
GUID)
As
Long
Private
Declare
Function
StringFromGUID2
Lib
"ole32.dll"
(rguid
As
Any,
ByVal
lpstrClsId
As
Long
,
ByVal
cbMax
As
Long
)
As
Long
Private
Function
GUIDGen()
As
String
'生成GUID
Dim
uGUID
As
GUID
Dim
sGUID
As
String
Dim
bGUID()
As
Byte
Dim
lLen
As
Long
Dim
RetVal
As
Long
lLen = 40
bGUID =
String
(lLen, 0)
CoCreateGuid uGUID
'把结构转换为一个可显示的字符串
RetVal = StringFromGUID2(uGUID, VarPtr(bGUID(0)), lLen)
sGUID = bGUID
If
(Asc(Mid$(sGUID, RetVal, 1)) = 0)
Then
RetVal = RetVal - 1
GUIDGen = Left$(sGUID, RetVal)
End
Function
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <objbase.h>
#include <stdio.h>
//--生成GUID
const
char
* newGUID()
{
static
char
buf[64] = {0};
GUID guid;
if
(S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf,
sizeof
(buf)
,
"{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1]
, guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
return
(
const
char
*)buf;
}
int
main(
int
argc,
char
* argv[])
{
//--COM
CoInitialize(NULL);
printf
(newGUID());
printf
(
"\n"
);
//--COM
CoUninitialize();
return
0;
}
Delphi
1
2
3
4
5
6
7
8
uses
ActiveX;
function
ctGUID:
string
;
var
id:TGUID;
begin
CoCreateGuid(id);
Result:=GUIDToString(id);
end
;
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using
System;
namespace
GUID测试
{
class
Program
{
static
void
Main(
string
[] args)
{
//产生一个新的GUID并输出
Console.WriteLine(System.Guid.NewGuid());
Console.ReadKey();
}
}
}
Java
1
2
3
4
5
6
7
8
9
10
11
import
java.util.UUID;
public
class
guid {
/**
* @param args
*/
public
static
void
main(String[] args) {
// TODO Auto-generated method stub
UUID uuid = UUID.randomUUID();
System.out.println(
".{"
+uuid.toString()+
"}"
);
}
}
OC
NSString * get_uuid()
{
CFUUIDRef uuid_ref = CFUUIDCreate(NULL);
CFStringRef uuid_string_ref= CFUUIDCreateString(NULL, uuid_ref);
CFRelease(uuid_ref);
NSString *uuid = [NSStringstringWithString:(NSString*)uuid_string_ref];
CFRelease(uuid_string_ref);
return uuid;
}
Pascal
【注:貌似上面的Delphi无法在free pascal下使用】
1
2
3
4
5
6
7
8
9
10
11
12
Function
Guid_Gen:
ansistring
;
Var
s:
string
;
i:
longint
;
Begin
s:=
'0123456789abcdef'
;
//8-4-4-4-12
Guid_Gen:=
'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
;
for
i:=
1
to
length(Guid_Gen)
do
begin
if
Guid_Gen[i]=
'x'
then
Guid_Gen[i]:=s[Random(
16
)+
1
];
end
;
End
;
易语言
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.版本 2
.DLL命令 CoCreateGuid, ,
"ole32"
,
"CoCreateGuid"
.参数 guid, 字节集
.版本 2
.子程序 生成新的GUID, 文本型
.局部变量 guid, 字节集
.局部变量 a, 长整数型
.局部变量 b, 整数型
.局部变量 c, 整数型
.局部变量 s, 文本型
.局部变量 i, 整数型
guid = 取空白字节集 (16)
CoCreateGuid (guid)
a = 取字节集数据 (取字节集左边 (guid, 4), #长整数型, )
b = 取字节集数据 (取字节集中间 (guid, 5, 2), #整数型, )
c = 取字节集数据 (取字节集中间 (guid, 7, 2), #整数型, )
s = “”
s = s + 取文本右边 (“00000000” + 取十六进制文本 (a), 8) + “-”
s = s + 取文本右边 (“0000” + 取十六进制文本 (b), 4) + “-”
s = s + 到小写 (取文本右边 (“0000” + 取十六进制文本 (c), 4)) + “-”
' 第三部分中的字母为小写字母
.计次循环首 (8, i)
s = s + 取文本右边 (“00” + 取十六进制文本 (guid [i + 8]), 2)
.如果真 (i = 2)
s = s + “-”
.如果真结束
.计次循环尾 ()
返回 (“{” + s + “}”)
PHP
1
2
3
4
5
6
7
8
9
10
public
function
create_guid(){
$charid
=
strtoupper
(md5(uniqid(mt_rand(), true)));
$hyphen
=
chr
(45);
// "-"
$uuid
=
substr
(
$charid
, 6, 2).
substr
(
$charid
, 4, 2).
substr
(
$charid
, 2, 2).
substr
(
$charid
, 0, 2).
$hyphen
.
substr
(
$charid
, 10, 2).
substr
(
$charid
, 8, 2).
$hyphen
.
substr
(
$charid
,14, 2).
substr
(
$charid
,12, 2).
$hyphen
.
substr
(
$charid
,16, 4).
$hyphen
.
substr
(
$charid
,20,12);
return
$uuid
;
}
1
2
3
Function
GetGuidToString()
As
String
GetGuidToString = LCase(Mid$(CreateObject(
"Scriptlet.TypeLib"
).GUID, 2, 36))
End
Function
参考note:935047 - Creating and using GUIDs (UUIDs)
Function group SYGU,
Function modules GUID_CREATE, GUID_CONVERT, SYSTEM_UUID_C22_CREATE,
Function group SYST,
Function modules SYSTEM_UUID_CREATE, SYSTEM_UUID_C_CREATE, SYSTEM_GET_UNIQUE_ID
Function modules GUID_CREATE, GUID_CONVERT, SYSTEM_UUID_C22_CREATE,
Function group SYST,
Function modules SYSTEM_UUID_CREATE, SYSTEM_UUID_C_CREATE, SYSTEM_GET_UNIQUE_ID
阅读全文
0 0
- guid介绍
- Guid 介绍
- GUID介绍
- GUID介绍
- MS SQL GUID介绍
- GUID Partition Table 介绍
- GUID
- GUID
- GUID
- GUID
- GUID
- GUID
- GUID
- GUID
- GUID
- GUID
- Guid
- guid
- 深入java 读读枚举类Enum源代码(转载)
- linux基本操作命令
- swift cell 分割线 显示不全 自由控制长度
- __stringify的作用等同于#
- 求一个n阶方阵对角线元素之和
- GUID介绍
- js中i++与++i的区别
- 3. 线性模型性能分析--混淆矩阵(Confusion Matrix)
- redis
- Ubuntu16.04编译Tensorflow
- hdu 4455 Substrings # dp / 线段树
- Set
- ThinkPHP5的安装方式
- Android图片加载框架最全解析(四),玩转Glide的回调与监听