Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


FlatX007, можно уменьшить кол-во вызовов Random():
Код: Выделить весь код
$p = _GetRandomString(10)
$e = @extended

ConsoleWrite("Password: "& $p &@CRLF)
ConsoleWrite("Skipped : "& $e &" chars"&@CRLF)

Func _GetRandomString($iLen, $sABC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_@")
    Local $iABC = StringLen($sABC), $sOut = ""
    Local $iBit = Int(Log($iABC)/Log(2)) ; бит на символ
    Local $iMsk = BitShift(1,-$iBit) -1  ; битовая маска
    Local $iChr = Int(31/$iBit)          ; символов на одно случайное число

        While 1
        $iRnd = Random(1, 0x7FFFFFFF, 1)
        For $i=1 To $iChr
            $sOut &= StringMid($sABC, BitAND($iRnd, $iMsk)+1, 1)
            If StringLen($sOut)>=$iLen Then Return SetError(0, $iABC-$iMsk-1,$sOut)
            $iRnd = BitShift($iRnd, $iBit)
        Next
    WEnd
EndFunc
ADD: кол-во символов должно быть равно степени двойки (32, 64,...), иначе строка обрезается до ближайшей такой

Последний раз редактировалось amel27, 11-07-2009 в 12:50. Причина: доработка скрипта

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:56, 11-07-2009 | #19