2005. február 28., hétfő
How to create a random string
Problem/Question/Abstract:
How to create a random string
Answer:
Solve 1:
var
LoopInt: Integer;
DirName, FullName, RanStr: string;
FileSavedTo: TextFile;
{ Length of string to create }
RandArray: array[0..4087] of Char;
FirstCount: Extended;
begin
FirstCount := GetTickCount;
Label2.Caption := '';
Randomize;
RanStr := '';
DirName := Directory95ListBox1.Directory;
if DirName[Length(DirName)] <> '\' then
DirName := DirName + '\';
FullName := DirName + Edit1.Text;
if FileExists(FullName) then
DeleteFile(FullName);
for LoopInt := Low(RandArray) to High(RandArray) do
begin
RanStr := RanStr + Chr(Random(255 - 32 + 1) + 32);
end;
AssignFile(FileSavedTo, FullName);
if FileExists(FullName) then
Reset(FileSavedTo)
else
Rewrite(FileSavedTo);
Writeln(FileSavedTo, RanStr);
CloseFile(FileSavedTo);
Label2.Caption := ' Done ';
Label4.Caption := FloatToStr((GetTickCount - FirstCount) / 1000);
FileListBox1.Update;
end;
Randomize should be called only once in an application. You should therefore put the above code into the form's OnCreate event for example, or remove Randomize from the above code and call it from the form's OnCreate event handler.
Solve 2:
This routine creates passwords from a string table with selected chars. Note: The password length must be shorter than the given string table length.
{Call Randomize only once at application start.}
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;
function RandomPwd(PWLen: integer): string;
{Set the table of chars to be used in passwords}
const
StrTable: string = '!#$%&/()=?@<>|{[]}\*~+#;:.-_' + 'ABCDEFGHIJKLMabcdefghijklm' +
'0123456789' + '�������' + 'NOPQRSTUVWXYZnopqrstuvwxyz';
var
N, K, X, Y: integer;
begin
{Check the maximum password length}
if (PWlen > Length(StrTable)) then
K := Length(StrTable) - 1
else
K := PWLen;
SetLength(result, K); {Set the length of the result string}
Y := Length(StrTable); {Table length for inner loop}
N := 0; {Loop start value}
while N < K do
begin {Loop to create K chars}
X := Random(Y) + 1; {Get next random char}
{Check for the presence of this char in the result string}
if (pos(StrTable[X], result) = 0) then
begin
inc(N); {Not found }
Result[N] := StrTable[X];
end;
end;
end;
Used like this:
procedure TForm1.Button1Click(Sender: TObject);
var
cPwd: string;
begin
{e.g. create a random password string with 30 chars}
cPwd := RandomPwd(30);
{ ... }
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése