gerar numero aleatorio
ola pessoal,
eu estou fazendo uma tela de proteção para a configuração do meu programa para que eu possa ter controle de quando foi acessado a tela de configuracao do sistema...... eu quero fazer isso pela data do sistema quando aumenta um dia ele troca a senha ... eu fiz um algoritmo que gera senha aleatoriamente mas eu uso a função [u:0089f61e04]Random[/u:0089f61e04] para isso mas nao pode ser um numero randomico gerado pela funcao se teria que se gerado por mim ai eu teria controle de que senha vai ser tal dia entao o usuario temque ligar para mim para poder obter a senha e com a funcao random ele la vai ter uma senha gerada e eu vou ter outra .... entendem .... eu quero fazer isso manualmente se algem conseguir m ajudar eu agradeço muito valew
olhem o meu codigo:
ai depois eu tenho que implementar para que a cada dia seja trocada automaticamente e se o usuario quiser entrar na configuração do sistema ele temque ligar para a empresa...
muito obrigado por estar lendo este tópico..
eu estou fazendo uma tela de proteção para a configuração do meu programa para que eu possa ter controle de quando foi acessado a tela de configuracao do sistema...... eu quero fazer isso pela data do sistema quando aumenta um dia ele troca a senha ... eu fiz um algoritmo que gera senha aleatoriamente mas eu uso a função [u:0089f61e04]Random[/u:0089f61e04] para isso mas nao pode ser um numero randomico gerado pela funcao se teria que se gerado por mim ai eu teria controle de que senha vai ser tal dia entao o usuario temque ligar para mim para poder obter a senha e com a funcao random ele la vai ter uma senha gerada e eu vou ter outra .... entendem .... eu quero fazer isso manualmente se algem conseguir m ajudar eu agradeço muito valew
olhem o meu codigo:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; Dia, Mes, Ano : string; const str=´1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ´; max=12; begin senha:=´´; Dia := FormatDateTime(´DD´,date); Mes := FormatDateTime(´MM´,date); Ano := FormatDateTime(´yy´,date); for i:=1 to max do senha:=senha+str[random(length(str))+1]; Insert(dia,senha,4); Insert(mes,senha,8); Insert(ano,senha,12); edit1.Text := senha; end;
ai depois eu tenho que implementar para que a cada dia seja trocada automaticamente e se o usuario quiser entrar na configuração do sistema ele temque ligar para a empresa...
muito obrigado por estar lendo este tópico..
Zumbi
Curtidas 0
Respostas
Cebikyn
22/01/2004
vc pode criar um algoritmo que faça cálculos a partir da data atual e chegue a um número ´randômico´.
GOSTEI 0
Zumbi
22/01/2004
Como eu tentei alguns metodos mas naum fui feliz!!!!?????
GOSTEI 0
Cebikyn
22/01/2004
Tipo, soma o dia com o mês, multiplica por uma constante, torna a somar o dia, esse tipo de coisa, mas de uma forma que não seja fácil pro usuário perceber.
GOSTEI 0
Wolverine
22/01/2004
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
const
str=´1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ´;
max=6;
begin
Edit1.Text:=´´;
for i:=1 to max do
Edit1.Text:=Edit1.Text+str[random(length(str))+1];
end;
var
i:integer;
const
str=´1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ´;
max=6;
begin
Edit1.Text:=´´;
for i:=1 to max do
Edit1.Text:=Edit1.Text+str[random(length(str))+1];
end;
GOSTEI 0
Nigro
22/01/2004
Como gerar numeros randomicos para loterias
Crie um form com os seguintes objetos:
- Listbox1 com a fonte ´Courier New´
- Edit1 com Edit1.Text := 6 Numero de Dezenas
- Edit2 with Edit2.Text := 49 Valor Maximo
- Edit3 with Edit3.Text := 10 Numero de Jogos
- Button1 com onClick com o evento Button1Click abaixo
Isto criará 10 serie de jogos
com os numeros entre 1 e 49
Numeros não serão repetidos
vc poderá mudar os tres valores
procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
Times, I, Number: Integer;
cInt, cLen: string;
begin
// make the button disabled to prevent multiple clicks
Self.enabled := False;
// convert the highest number
Number := StrToInt(Edit2.Text);
// this creates the correct format-argument for every
// max-numbers (e.g. 49 , 120, 9999 ....)
cLen := IntToStr(length(trim(Edit2.text)) + 1);
MyList := TStringList.Create;
try
// first clear the Listbox
Listbox1.clear;
// here we start a new serie
for Times := 1 to StrToInt(Edit3.Text) do
begin
// we go thru this while-loop until the max-numbers
// are created. Not every loop creates an entry
// to the list because double numbers are ignored.
while MyList.Count < StrToInt(Edit1.Text) do
begin
// get a new random number
I := Random(Number);
if (I 0) then
begin
// cLen has the number of chars from max-number plus one
// e.g.
// if max-number is 49 cLen is 3
// if max-number is 111 cLen is 4
// if max-number is 9999 cLen is 5
// this formatting is needed for the correct
// sorting of all List-Entries
cInt := Format(´¬´ + cLen + ´.1d´, [I]);
// here we look at double entries and ignore it
if (MyList.IndexOf(cInt) < -1) then
continue;
// now we add a new randomnumber
MyList.Add(cInt);
end;
end;
cInt := ´´;
// max-numbers are created now we sort it
MyList.Sort;
// and put it all into Listbox
for I := 0 to MyList.Count - 1 do
cInt := cInt + MyList.Strings[I];
ListBox1.Items.Add(cInt);
// clear MyList for the next serie
MyList.clear;
end;
finally
MyList.Free;
end;
// make the button enable for the next click
Self.enabled := True;
end;
--------------------------------------------------------------------------------
Outra opção sem utilizar componentes visuais é:
type
{array of series of picks, used in Pick function}
TPick = array of array of integer;
function Pick (APicks, AMax, ASeries: integer): TPick;
var
I, J, Index: integer;
PickArray: array of integer;
begin
if (APicks = AMax) then
begin
raise Exception.Create (´Pick: Max available number should be larger than number of picks´);
end;
if (APicks < 1) then
begin
raise Exception.Create (´Pick: You should request at least one pick´);
end;
if (ASeries < 1) then
begin
raise Exception.Create (´Pick: You should request at least one series´);
end;
SetLength (Result, ASeries);
for I := Low (Result) to High (Result) do
begin
{populate AArray }
SetLength (PickArray, AMax);
for J := Low (PickArray) to High (PickArray) do
begin
PickArray [J] := J + 1;
end;
SetLength (Result [I], APicks);
for J := Low (Result [I]) to High (Result [I]) do
begin
Result [I, J] := 0;
while (Result [I, J] = 0) do
begin
Index := Random (AMax);
Result [I, J] := PickArray [Index];
PickArray [Index] := 0;
end;
end; {for J}
end; {for I}
end; {--Pick--}
Exemplo de Uso
var
APick: TPick;
begin
APick := Pick (6, 49, 10); {we need 10 series of 6/49 numbers}
...
Crie um form com os seguintes objetos:
- Listbox1 com a fonte ´Courier New´
- Edit1 com Edit1.Text := 6 Numero de Dezenas
- Edit2 with Edit2.Text := 49 Valor Maximo
- Edit3 with Edit3.Text := 10 Numero de Jogos
- Button1 com onClick com o evento Button1Click abaixo
Isto criará 10 serie de jogos
com os numeros entre 1 e 49
Numeros não serão repetidos
vc poderá mudar os tres valores
procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
Times, I, Number: Integer;
cInt, cLen: string;
begin
// make the button disabled to prevent multiple clicks
Self.enabled := False;
// convert the highest number
Number := StrToInt(Edit2.Text);
// this creates the correct format-argument for every
// max-numbers (e.g. 49 , 120, 9999 ....)
cLen := IntToStr(length(trim(Edit2.text)) + 1);
MyList := TStringList.Create;
try
// first clear the Listbox
Listbox1.clear;
// here we start a new serie
for Times := 1 to StrToInt(Edit3.Text) do
begin
// we go thru this while-loop until the max-numbers
// are created. Not every loop creates an entry
// to the list because double numbers are ignored.
while MyList.Count < StrToInt(Edit1.Text) do
begin
// get a new random number
I := Random(Number);
if (I 0) then
begin
// cLen has the number of chars from max-number plus one
// e.g.
// if max-number is 49 cLen is 3
// if max-number is 111 cLen is 4
// if max-number is 9999 cLen is 5
// this formatting is needed for the correct
// sorting of all List-Entries
cInt := Format(´¬´ + cLen + ´.1d´, [I]);
// here we look at double entries and ignore it
if (MyList.IndexOf(cInt) < -1) then
continue;
// now we add a new randomnumber
MyList.Add(cInt);
end;
end;
cInt := ´´;
// max-numbers are created now we sort it
MyList.Sort;
// and put it all into Listbox
for I := 0 to MyList.Count - 1 do
cInt := cInt + MyList.Strings[I];
ListBox1.Items.Add(cInt);
// clear MyList for the next serie
MyList.clear;
end;
finally
MyList.Free;
end;
// make the button enable for the next click
Self.enabled := True;
end;
--------------------------------------------------------------------------------
Outra opção sem utilizar componentes visuais é:
type
{array of series of picks, used in Pick function}
TPick = array of array of integer;
function Pick (APicks, AMax, ASeries: integer): TPick;
var
I, J, Index: integer;
PickArray: array of integer;
begin
if (APicks = AMax) then
begin
raise Exception.Create (´Pick: Max available number should be larger than number of picks´);
end;
if (APicks < 1) then
begin
raise Exception.Create (´Pick: You should request at least one pick´);
end;
if (ASeries < 1) then
begin
raise Exception.Create (´Pick: You should request at least one series´);
end;
SetLength (Result, ASeries);
for I := Low (Result) to High (Result) do
begin
{populate AArray }
SetLength (PickArray, AMax);
for J := Low (PickArray) to High (PickArray) do
begin
PickArray [J] := J + 1;
end;
SetLength (Result [I], APicks);
for J := Low (Result [I]) to High (Result [I]) do
begin
Result [I, J] := 0;
while (Result [I, J] = 0) do
begin
Index := Random (AMax);
Result [I, J] := PickArray [Index];
PickArray [Index] := 0;
end;
end; {for J}
end; {for I}
end; {--Pick--}
Exemplo de Uso
var
APick: TPick;
begin
APick := Pick (6, 49, 10); {we need 10 series of 6/49 numbers}
...
GOSTEI 0
Zumbi
22/01/2004
valew vou testar!!!!!!!!!!!!!!!!
GOSTEI 0
Zumbi
22/01/2004
ola Nigro...
legal seu programa que vc colocou!!!
mas se vc percebeu vc usa a função [u:d205c342ac]Randon[/u:d205c342ac]
entaum eu naum posso usar isso pois naum tenho controle de que nº esta sendo gerado ...... pois eu vou ter a aplicação no cliente e todo dia muda a senha entaum a senha que gerar la vai terque ser a mesma que eu terei aqui na empresa.....e com a funcao random naum tem como fazer isso pois aqui vai gerar um numero e la vai gerar outro !!!!!!!!!
hehheeh entao se puder ver algo que que naum utilize a funcao random eu agradeço ....
velew pela ajuda!!!!!
legal seu programa que vc colocou!!!
mas se vc percebeu vc usa a função [u:d205c342ac]Randon[/u:d205c342ac]
while MyList.Count < StrToInt(Edit1.Text) do begin // get a new random number I := Random(Number); if (I 0) then begin // cLen has the number of chars from max-number plus one // e.g. // if max-number is 49 cLen is 3 // if max-number is 111 cLen is 4 // if max-number is 9999 cLen is 5
entaum eu naum posso usar isso pois naum tenho controle de que nº esta sendo gerado ...... pois eu vou ter a aplicação no cliente e todo dia muda a senha entaum a senha que gerar la vai terque ser a mesma que eu terei aqui na empresa.....e com a funcao random naum tem como fazer isso pois aqui vai gerar um numero e la vai gerar outro !!!!!!!!!
hehheeh entao se puder ver algo que que naum utilize a funcao random eu agradeço ....
velew pela ajuda!!!!!
GOSTEI 0
Nigro
22/01/2004
dedsculpe... vou procurar alguma coisa aqui...
GOSTEI 0
Zumbi
22/01/2004
UP!!!!!!!!
GOSTEI 0
Paulo_amorim
22/01/2004
Olá
Acho boa a ideia dada pelo cebikyn
por que não tenta chegar a um numero ´randomico´ que vc cria?
seila, soma, divide, pega o MOD...ai vc pode complicar a vontade
Acho boa a ideia dada pelo cebikyn
por que não tenta chegar a um numero ´randomico´ que vc cria?
seila, soma, divide, pega o MOD...ai vc pode complicar a vontade
GOSTEI 0
Paulo_amorim
22/01/2004
Olá
Acho boa a ideia dada pelo cebikyn
por que não tenta chegar a um numero ´randomico´ que vc cria?
seila, soma, divide, pega o MOD...ai vc pode complicar a vontade
Acho boa a ideia dada pelo cebikyn
por que não tenta chegar a um numero ´randomico´ que vc cria?
seila, soma, divide, pega o MOD...ai vc pode complicar a vontade
GOSTEI 0