-
GUID
(全局唯一標識符)
鎖定
- 中文名
- 全局唯一標識符
- 外文名
- GUID,Globally Unique Identifier
- 類 型
- 數字唯一標識符
- 作用於
- 多節點、多計算機的網絡或系統
GUID格式
GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個 x 是 0-9 或 a-f 範圍內的一個十六進制數。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效的 GUID 值。
GUID軟件特點
1.需要GUID的時候,可以完全由算法自動生成,不需要一個權威機構來管理。
2.GUID理論上能產生全宇宙唯一的值,對於以後的數據導入很方便。
GUID爭議
由於GUID值產生的潛在弊端已經引起了保密性提倡者的關注。1999年3月,美國聯邦商務委員會接到要求,對微軟的GUID值使用進行調查。爭議主要涉及Office 97和Office 2000文檔對GUID值的使用。Office文檔,如Word文件或Excel電子數據表,所使用的GUID值對用户是不可見的。但有很多報道宣稱,文檔的作者是可以通過GUID值的跟蹤查到的,即使作者已經採用特殊方法,他們還是可以被追蹤到。 為了迴應上述問題,微軟已經發布了一個Office 97修補版SR2,它禁止了GUID功能的使用,並且還可以將現存文檔的GUID去除。
潛在的對Intel處理器序列號濫用的問題與上述GUID值的問題本質是一樣的。
GUID程序
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++
#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
uses ActiveX; function ctGUID:string; var id:TGUID; begin CoCreateGuid(id); Result:=GUIDToString(id); end;
C#
using System; namespace GUID測試 { class Program { static void Main(string[] args) { //產生一個新的GUID並輸出 Console.WriteLine(System.Guid.NewGuid()); Console.ReadKey(); } } }
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下使用】
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;
.版本 2 .DLL命令 CoCreateGuid, , "ole32", "CoCreateGuid" .參數 guid, 字節集 .版本 2 .子程序 生成新的GUID, 文本型 .局部變量 guid, 字節集 .局部變量 a, 整數型 .局部變量 b, 整數型 .局部變量 c, 整數型 .局部變量 d, 整數型 .局部變量 e, 整數型 .局部變量 f, 整數型 .局部變量 s, 文本型 guid = 取空白字節集 (16) CoCreateGuid (guid) a = 取字節集數據 (取字節集左邊 (guid, 4), #整數型, ) b = 取字節集數據 (取字節集中間 (guid, 5, 2), #整數型, ) c = 取字節集數據 (取字節集中間 (guid, 7, 2), #整數型, ) d = 取字節集數據 (取字節集中間 (guid, 9, 2), #整數型, ) e = 取字節集數據 (取字節集中間 (guid, 11, 2), #整數型, ) f = 取字節集數據 (取字節集右邊 (guid, 4), #整數型, ) s = “” s = s + 取十六進制文本 (a) + “-” s = s + 取十六進制文本 (b) + “-” s = s + 到小寫 (取十六進制文本 (c)) + “-” ' 第三部分中的字母為小寫字母 s = s + 取十六進制文本 (d) + “-” s = s + 取十六進制文本 (e) s = s + 取十六進制文本 (f) 返回 (“{” + s + “}”)
Excel VBA
Function GetGuidToString() As String GetGuidToString = LCase(Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36)) End Function
SAPABAP
參考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 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; }
javascript
function newGuid() { var guid = ""; for (var i = 1; i <= 32; i++) { var g = Math.floor(Math.random() * 16.0).toString(16); guid += g; if ((i == 8) || (i == 12) || (i == 16) || (i == 20)) { guid += "-"; } } return guid.toUpperCase(); }