如: 20H10EJZ5 20H10EJYR....当然 全是数字 也行 如: 9854 2361 但是我怀疑这样的 会重复 注意 每次产生的 必须是唯一的 如同createguid 但不要那么长的有这样的 函数吗 ?
解决方案 »
- 比较两个多线程实例,出错在哪?
- 修改TForm的Caption问题
- TDSFANCY tkvlabel都属于哪个控件组里面的
- 关于PAINTBOX画图显示与存储问题
- 请问:varchar型字段写不进,这是怎么回事?
- 菜鸟盼救,怎么去掉字符串前面几个字??
- 存储过程怎样存图片(不够分再加)救救兄弟吧
- 如何报stringgrid的列变成具有下拉框的功能?
- 做程序员的我,老婆也快找不到了
- 如何用DELPHI修改注册表,使程序随WIN系统启动而启动!
- ~~~~~~~有一个Combobox,怎样根据DBGrid里的某字段的值改变Combobox的itemindex
- 从2个连接后的表随机按比例随机抽取数据
const
s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Var
i, l: Integer;
begin
l := Length(s);
Randomize; Result := '';
for i:=0 to ALen-1 do
begin
Result := Result + s[Random(l)+1];
end;
end;
const
s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Var
i, l: Integer;
begin
l := Length(s);
Randomize; Result := '';
for i:=0 to ALen-1 do
begin
Result := Result + s[Random(l)+1];
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i: Integer;
lst: TStringList;
begin
try
lst := TStringList.Create; lst.Sorted :=True ;
lst.Duplicates := dupIgnore; for i := 1 to 10000 do begin
//Memo1.Lines.Add(RandomStr(4));
lst.Add(RandomStr(4));
end; ShowMessage(IntToStr(lst.Count)); finally
FreeAndNil(lst);
end;
end;
好像和 随机数的数目和 长度有关系 我测试了一下 有重复的 但很少了
procedure TForm1.Button3Click(Sender: TObject);
var i, j: Integer;
lst: TStringList;
begin
try
lst := TStringList.Create; lst.Sorted := True;
lst.Duplicates := dupIgnore;
lst.CaseSensitive :=True ; //字母有大小写 for j := 1 to 100 do
begin
lst.Clear;
for i := 1 to 5000 do begin
//Memo1.Lines.Add(RandomStr(4));
lst.Add(RandomStr(5));
Application.ProcessMessages;
end; //ShowMessage(IntToStr(lst.Count));
Memo1.Lines.Add(IntToStr(lst.Count));
Application.ProcessMessages;
end;
finally
FreeAndNil(lst);
end;
end;
测试 了 100 次 没次 5000 个随机 没有重复的 呵呵
要么记下已经产生过的结果串,要么记下上一次用于生成串的关键字(seed),下回从下一个开始
想要多长?
时间的,毫秒级
s := formatDatetime('yymmddhhmmsszzz', now)
s := formatDatetime('yymmddhhmmsszzz', now)
时间毫秒 大家都是这么采用的吗 ?我要把产生的 字符串作为主键数据 写入数据库的。
操作是 当用户导入数据时 字符串+0001(序号) 为每一个数据做主键标识