Генерация пароля (pasword generation)

Тема в разделе "Lotus - Программирование", создана пользователем lmike, 16 фев 2015.

  1. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    первым делом спросил гугл ;)
    то что увидел в первых подборка меня "огорчило"
    наткнулся на вариант кот подошел под критерии "моих тараканов"
    Код (LotusScript):

    %REM
    *--------------------------------------------
       Function GenPassword
       Description: Comments for Function
    %END REM

    Public Function GenPassword(PWLength As Integer, range As Single) As String
       On Error GoTo ErrH
       Dim i As Integer
       Dim RndNumber As Integer
       Dim RndAllowed As Boolean
       For i = 1 To PWLength
         RndAllowed = False
         Do
           Select Case range
           'Random from ASCII 48 - 122 (letters and digits)
           Case 0
             RndNumber = Round((74 * Rnd() +48),0)
           'Random from ASCII 65 - 122 (only letters)
           Case 1
             RndNumber = Round((57 * Rnd() +65),0)
           'Random from ASCII 48 - 57 (only digits)
           Case 2
             RndNumber = Round((9 * Rnd() +48),0)
           Case Else
             Error 1024, CS_BADRANGE
           End Select  
           Select Case RndNumber
             'digits
           Case 48 To 57
             RndAllowed = True
             'CAPS
           Case 65 To 90
             RndAllowed = True
             'non CAPS
           Case 97 To 122
             RndAllowed = True
           Case Else
             RndAllowed = False
         End Select
         Loop Until RndAllowed
         GenPassword=GenPassword & Chr(RndNumber)
       Next
    Quit:
       Exit Function
    ErrH:
       Error Err, RaiseError
       Resume Quit
    End Function
     
     
    #1 lmike, 16 фев 2015
    Последнее редактирование модератором: 16 фев 2015
    2 пользователям это понравилось.
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    критически оценил case ;) - многабукав
    Код (LotusScript):
    %REM
    *--------------------------------------------
        Function GenPassword
        Description: Comments for Function
    %END REM

    Public Function GenPassword(PWLength As Integer, range As Single) As String
        On Error GoTo ErrH
        Dim i As Integer
        Dim RndNumber As Integer
        Dim RndAllowed As Boolean
        For i = 1 To PWLength
            Do
                Select Case range
                'Random from ASCII 48 - 122 (letters and digits)
                Case 0
                    RndNumber = Round((74 * Rnd() +48),0)
                'Random from ASCII 65 - 122 (only letters)
                Case 1
                    RndNumber = Round((57 * Rnd() +65),0)
                'Random from ASCII 48 - 57 (only digits)
                Case 2
                    RndNumber = Round((9 * Rnd() +48),0)
                Case Else
                    Error 1024, CS_BADRANGE
                End Select
    %REM      
                Select Case RndNumber
                    'digits
                Case 48 To 57
                    RndAllowed = True
                    'CAPS
                Case 65 To 90
                    RndAllowed = True
                    'non CAPS
                Case 97 To 122
                    RndAllowed = True
                Case Else
                    RndAllowed = False
            End Select
    %END REM

                RndAllowed = True
                If RndNumber>90 And RndNumber < 97 Then RndAllowed=False
            Loop Until RndAllowed
            GenPassword=GenPassword & Chr(RndNumber)
        Next
    Quit:
        Exit Function
    ErrH:
        Error Err, RaiseError
        Resume Quit
    End Function
     
  3. akat

    akat Lotus team
    Lotus team

    Регистрация:
    16 июн 2010
    Сообщения:
    243
    Симпатии:
    7
    Код (LotusScript):

    Function GenPassword( PassLen As Integer, PassType As Integer ) As String
    '   PassType - тип пароля:
    '   0 - цифры и символы обоих регистров
    '  1 - только цифры
    '  2 - цифры и символы  нижнего регистра

       Dim i As Integer, SymbolType As Integer
       Dim Symbol As String

     
       Randomize  
     
       For i = 1 To PassLen
         Select Case PassType
         Case 0: SymbolType = Fix( 3 * Rnd() )
         
         Case 1: SymbolType = 0
         
         Case 2: SymbolType = Fix( 2 * Rnd() )      
         
         End Select
       
       
         Select Case Symboltype
         Case 0:
           GenPassword = GenPassword + CStr( Fix( 10 * Rnd() ) )
                   
         Case 1:  '  Нижний регистр
           GenPassword = GenPassword + CStr( Chr( 97 + Int( 26 * Rnd() ) ) )
         
         Case 2:  '  Верхний регистр
           GenPassword = GenPassword + CStr( Chr( 65 + Int( 26 * Rnd() ) ) )      
         
         End Select
       
       Next
     
    End Function
     
     
    #3 akat, 18 фев 2015
    Последнее редактирование модератором: 18 фев 2015
    2 пользователям это понравилось.
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    что-то с кодом... Print {fix:} Fix(3*0.1){;} Fix(2*0.1)
    попробуйте ;)
    Int() - не способствует равномерному распределению (как и Fix) именно поэтому и существует Round
    по логике - если генерить в цикле, то надо бы и способ преобразования (по возможности) одинаковый
    Chr - значит единообразно
    [DOUBLEPOST=1424271396,1424271208][/DOUBLEPOST]@akat оборачивайте в теги code и spoiler
    [DOUBLEPOST=1424271682][/DOUBLEPOST]да Randomize (затравка) имеет смысл, если будет код на сервере
     
Загрузка...
Похожие Темы - Генерация пароля (pasword
  1. framd
    Ответов:
    1
    Просмотров:
    782
  2. DamirAstana
    Ответов:
    11
    Просмотров:
    1.875
  3. Kee_Keekkenen
    Ответов:
    1
    Просмотров:
    1.294
  4. keepergf
    Ответов:
    0
    Просмотров:
    1.272
  5. vladis222
    Ответов:
    11
    Просмотров:
    2.556

Поделиться этой страницей