# 如何得到一个唯一的串呢,位数尽量的少

newsunet 2005-03-29 10:38:55

procedure TForm1.Button1Click(Sender: TObject);
var i,j,c:integer;
enchar : array[0..35] of char;
str:string;
begin
enchar[0] := '0';
enchar[1] := '1';
enchar[2] := '2';
enchar[3] := '3';
enchar[4] := '4';
enchar[5] := '5';
enchar[6] := '6';
enchar[7] := '7';
enchar[8] := '8';
enchar[9] := '9';

enchar[10] := 'A';
enchar[11] := 'B';
enchar[12] := 'C';
enchar[13] := 'D';
enchar[14] := 'E';
enchar[15] := 'F';
enchar[16] := 'G';
enchar[17] := 'H';
enchar[18] := 'I';
enchar[19] := 'J';

enchar[20] := 'K';
enchar[21] := 'L';
enchar[22] := 'M';
enchar[23] := 'N';
enchar[24] := 'O';
enchar[25] := 'P';
enchar[26] := 'Q';
enchar[27] := 'R';
enchar[28] := 'S';
enchar[29] := 'T';

enchar[30] := 'U';
enchar[31] := 'V';
enchar[32] := 'W';
enchar[33] := 'X';
enchar[34] := 'Y';
enchar[35] := 'Z';

memo1.Lines.Clear;
for i:= 1 to 1000 do
begin
str := floattostr(double(now));
c:=pos('.',str);
str := copy(str,1,c-1)+copy(str,c+1,length(str)-c);
for j:= 1 to 18-length(str) do
begin
Randomize;
str := str + enchar[Random(36)];
end;
end;
end;
...全文
115 12 打赏 收藏 举报

12 条回复

newsunet 2005-03-29

• 打赏
• 举报

newsunet 2005-03-29
to aiirii:老兄,能给个算法吗
• 打赏
• 举报

GUID 重码的概率几乎为零，就是她长了点 :)
• 打赏
• 举报

aiirii 2005-03-29

function CreateGUID(out Guid: TGUID): HResult;

function GUIDToString(const ClassID: TGUID): string;
• 打赏
• 举报

newsunet 2005-03-29

• 打赏
• 举报

newsunet 2005-03-29

sleep(10);//
str := floattostr(double(now));
c:=pos('.',str);
str := copy(str,1,c-1)+copy(str,c+1,length(str)-c);

• 打赏
• 举报

lencon 2005-03-29

• 打赏
• 举报

newsunet 2005-03-29

• 打赏
• 举报

laiqinghe 2005-03-29
（1）测试 一下 length(str) 一般都是 15

（2） for j:= 1 to 18-length(str) do
begin
Randomize;
str := str + enchar[Random(36)];
sleep(10);//加这个
end;

• 打赏
• 举报

laiqinghe 2005-03-29
for j:= 1 to 18-length(str) do //把18 改成17 ？？？？？？？？
• 打赏
• 举报

newsunet 2005-03-29

//=================================
class function SEnCoding.GetGUID: string;
var
guid:TGUID;
begin
CreateGUID(guid);
Result := GUIDToString(guid);
end;
//===================================
max := 10000;
try
for i:= 1 to max do
begin
db.FSQLQuery.ExecSQL(true);
end;
finally
db.Free;
end;

• 打赏
• 举报

RamjetZhang 2005-03-29

• 打赏
• 举报

1.6w+

Delphi 语言基础/算法/系统设计

2005-03-29 10:38