将JavaScript(随机UID)代码转换为 Delphi

pepwfjgg  于 2023-03-18  发布在  Java
关注(0)|答案(1)|浏览(365)

我试图将JavaScript代码转换为 Delphi ,但我失败了。Javascript:

/* generate random progress-id */
var uuid = "";
var i;
for (i = 0; i < 32; i++) {
  uuid += Math.floor(Math.random() * 16).toString(16);
}

...及其输出:

a638aa8f74e2654c725fd3cdcf2927d3

我在 Delphi 的尝试:

function uid: String;
var
  i: Integer;
begin
  for I := 0 to 31 do begin
    result := result + IntToStr(Floor(Random * 16));
  end;
end;

我在 Delphi 方面的知识有限,所以我不知道该做些什么。我希望看到一些帮助,并从中学习。

lh80um4z

lh80um4z1#

从字面上看,下面是函数在 Delphi 中的样子:

function uid: String;
var
  i: Integer;
begin
  for i := 0 to 31 do
    Result := Result + IntToHex(Random(16), 1);
end;

如果需要小写的“id”-使用AnsiLowerCase函数。

编辑

以正确性的名义,不推荐上面的自制方法--它只是javascript片段的字面翻译,可能会导致冲突(而且会)。
建议使用以下功能:

function uid: String;
var
  myGuid: TGUID;
begin
  if Succeeded(CreateGUID(myGUID)) then
    Result := Format('%0.8X%0.4X%0.4X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X',
      [myGUID.D1, myGUID.D2, myGUID.D3,
      myGUID.D4[0], myGUID.D4[1], myGUID.D4[2], myGUID.D4[3],
      myGUID.D4[4], myGUID.D4[5], myGUID.D4[6], myGUID.D4[7]]) else
    {TODO: some error processing - something bad happened}
end;

上面关于小写“id”的注意在这里也是有效的。

相关问题