Guid生成唯一ID编号

本文介绍了一种在Delphi中生成全局唯一标识符(GUID)的方法。通过使用ActiveX单元中的CoCreateGuid函数来创建GUID,并将其转换为字符串格式。如果创建失败,则采用基于当前时间和计数器的方式生成唯一字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function GetGUID: string;
var
  i: Integer;
  GUID: TGUID;
begin
  i := 0;
  Result := '';

  while i < 3 do
  begin
    if CoCreateGuid(GUID) = S_OK then
    begin
      SetLength(Result, 32);
      StrLFmt(PChar(Result), 32,'%.8x%.4x%.4x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x',
        [Guid.D1, Guid.D2, Guid.D3, Guid.D4[0], Guid.D4[1], Guid.D4[2], Guid.D4[3],
        Guid.D4[4], Guid.D4[5], Guid.D4[6], Guid.D4[7]]);

      Break;
    end;

    Inc(i);
  end;

  if Result = '' then
  begin
    GUIDCnt := GUIDCnt + 1;
    Result := FormatDateTime('YYYYMMDDHHMMSSZZZ', Now) + '-' + IntToHex(GUIDCnt, 14);
  end;
end;

uses Winapi.ActiveX,
最后记得引用 ActiveX单元
### Java 中生成唯一 ID 的方法 #### 使用 `UUID` 类生成全局唯一标识符 (GUID) Java 提供了内置的 `UUID` 类来生成全局唯一的标识符。这种方法简单易用,不需要依赖外部服务或网络连接。 ```java import java.util.UUID; public class UniqueIDGenerator { public static String generateUUID() { return UUID.randomUUID().toString(); } public static void main(String[] args) { System.out.println("Generated UUID: " + generateUUID()); } } ``` 通过调用 `UUID.randomUUID()` 可以获得一个新的随机 UUID 实例,并将其转换成字符串形式返回[^1]。 然而需要注意的是,由于 UUID 长度较长且无明显规律,在某些场景下可能不太适合用于数据库主键或其他需要简洁表示的应用场合[^2]. #### 基于哈希码的方式生成短一些的唯一 ID 如果希望得到更紧凑一点的独特编号,则可以考虑基于现有对象(比如 UUID)计算其哈希值: ```java public class HashBasedUniqueID { public static int generateHashCodeFromUUID(){ return UUID.randomUUID().toString().hashCode(); } public static void main(String[] args){ System.out.println("Hash code from UUID:" +generateHashCodeFromUUID()); } } ``` 这种方式虽然能有效缩短最终输出的结果长度,但由于采用了简单的哈希算法,理论上存在碰撞的可能性,即两个不同输入可能会映射到相同的整数值上[^3]. 对于大多数应用场景而言,上述两种方案已经能够很好地解决问题;但对于那些对性能极其敏感的任务来说,还可以探索其他更加高效的实现策略,例如引入分布式环境下的唯一 ID 生产者组件等[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值