Witam,
Mam taki problem, pisze generator haseł w php na stronie, i staram sie go jak najlepiej zoptymalizować, pokaże wam mój algorytm może ktoś podsunie mi lepszy pomysł którego nie zauwazyłem żeby to zaimplementować. Ogólnie generator ma losować wybranej długości hasło z liter i cyfr, ale jest możliwość jescze wybrania niektórych standardowych znaków aby losowało też wsród nich. Tak wygląda formularz, znaki są przechowywane w tablicy, każdy znak ma wartość swojego znaku w tablicy ASCII.
Oto kod kontrolera który generuje hasło (codeigniter):
private function _generujHaslo($data){
$this->load->view('generator');
if(isset($data['haslo_dlugosc']) && is_numeric($data['haslo_dlugosc']) && !isset ($data['haslo_znaki'])){
$dlugosc=$data['haslo_dlugosc'];
for($i=0; $i<$dlugosc;$i++){
$wynik= mt_rand(48, 122);
while($wynik>=58 && $wynik<=64 || $wynik>=91 && $wynik<=96){
$wynik= mt_rand(48, 122);
}
printf("%c", $wynik);
}
}
if(isset($data['haslo_dlugosc']) && is_numeric($data['haslo_dlugosc']) && isset($data['haslo_znaki'])){
$dlugosc=$data['haslo_dlugosc'];
$znaki=$data['haslo_znaki'];
$znak_max=max($znaki);
$znak_min=min($znaki);
for($i=0; $i<$dlugosc;$i++){
if($znak_min<48 && $znak_max>122){
$wynik= mt_rand($znak_min, $znak_max);
} else if($znak_min<=48 && $znak_max<=122){
$wynik= mt_rand($znak_min, 122);
} else if($znak_min>=48 && $znak_max>=122){
$wynik = mt_rand(48,$znak_max);
} else if($znak_min>=48 && $znak_max<=122){
$wynik= mt_rand(48, 122);
}
if($wynik>=48 && $wynik<=57 || $wynik>=65 && $wynik<=90 || $wynik>=97 && $wynik<=122){
printf("%c", $wynik);
}
else{
$testing=TRUE;
while($testing==TRUE){
foreach ($znaki as $row){
if($row==$wynik){
$testing=FALSE;
printf("%c", $wynik);
break;
}
}
$wynik=mt_rand($znak_min, $znak_max);
}
}
}
}
Kod działa, pytanie czy może działać szybciej i czy ktoś ma może jakieś pomysły których ja nie dostrzegłem :)
Z góry dzieki za pomoc