在 Delphi 中生成和操作 GUID 的常用方法如下:
1. 基础方法:CreateGUID + GUIDToString 通过系统函数生成原始 GUID 并转换为字符串:
uses SysUtils, ActiveX;
function GenerateGUID: string;
var
Guid: TGUID;
begin
CreateGUID(Guid); // 生成 TGUID 结构体:ml-citation{ref="6,8" data="citationList"}
Result := GUIDToString(Guid); // 转换为字符串(带大括号和连字符):ml-citation{ref="1,6" data="citationList"}
end;
输出示例: {3F2504E0-4F89-11D3-9A0C-0305E82C3301}
2. 快速生成无符号格式
通过 CreateClassID 生成并移除格式符号:
uses ComObj;
function GenerateCompactGUID: string;
begin
Result := CreateClassID; // 直接生成带大括号的 GUID 字符串:ml-citation{ref="3,4" data="citationList"}
Result := StringReplace(Result, '{', '', [rfReplaceAll]); // 移除大括号:ml-citation{ref="4,5" data="citationList"}
Result := StringReplace(Result, '}', '', [rfReplaceAll]);
Result := StringReplace(Result, '-', '', [rfReplaceAll]); // 移除连字符:ml-citation{ref="4,8" data="citationList"}
end;
3. 调用系统 API CoCreateGuid
直接使用 Windows API 生成 GUID:
uses ActiveX;
function GenerateViaAPI: string;
var
Guid: TGUID;
begin
OleCheck(CoCreateGuid(Guid)); // 调用系统 API:ml-citation{ref="3,8" data="citationList"}
Result := GUIDToString(Guid);
end;
4. 高级场景:生成版本 1 GUID
通过 TGuidGenerator 类生成特定版本(需 Delphi 10.3+):
uses System.SysUtils, System.Guid;
function GenerateVersion1GUID: string;
var
Guid: TGuid;
begin
Guid := TGuidGenerator.NewGuid(TGuidType.gtGuid1); // 版本 1(时间+MAC地址):ml-citation{ref="7" data="citationList"}
Result := Guid.ToString;
end;
格式化选项:
默认格式:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
紧凑格式:移除 {、} 和 - 符号,保留 32 位字符
自定义处理:通过 StringReplace 或字符串截取调整格式
注意事项:
需引用单元:SysUtils、ActiveX、ComObj(根据方法选择)
生成效率:CreateGUID 和 CoCreateGuid 性能接近,适用于高频调用
唯一性:版本 4(默认)基于随机数,版本 1 基于时间戳和硬件地址