Vb6, Как я делаю Случайную строку 0-9 и a-z x символов

Я с трудом пытаюсь понять, что вы хотите сделать с этой строкой кода, но вот мой шанс. Он вернет Boolean = False только в том случае, если A1 пусто, а A2 нет, или если A1 не пусто, но A2 равно.

If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
    Boolean = False
End If
11
задан 15 November 2008 в 07:02
поделиться

7 ответов

Function RandomString(cb As Integer) As String

    Randomize
    Dim rgch As String
    rgch = "abcdefghijklmnopqrstuvwxyz"
    rgch = rgch & UCase(rgch) & "0123456789"

    Dim i As Long
    For i = 1 To cb
        RandomString = RandomString & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
    Next

End Function

Знайте, что встроенный генератор случайных чисел не cryprographically безопасен, таким образом, функция как это не должна использоваться для генерации паролей.

27
ответ дан 3 December 2019 в 02:53
поделиться

Я забыл весь свой VB6 (слава Богу), но в псевдокоде это довольно легко:

    all_chars = an array of all the valid chars
    seed random number generator
    for i = 1 to x do
        random_index = get a random number between 1 and length of all_chars
        'I remember how to concat and comment in VB6 :-)
        string = string & all_chars[random_index] 
    end for

    done!

Таким образом, это - просто вопрос обнаружения, как создать массив и заполнить его символами, как получить длину массива и как получить случайное число между первыми и последними индексами упомянутого массива.

Ну, все это и цикличное выполнение, конечно.

1
ответ дан 3 December 2019 в 02:53
поделиться

Использование рандомизирует
Интервал (Rnd * верхняя граница) + (нижняя граница) генерирует случайное число
Генерируйте массив со значениями от asc ("a") к asc ("z") и от asc ("0") к asc ("9")
Генерируйте случайное число между 1 и 26 (10+26) и ищите его в массиве.

Не имейте VB6 установленным больше.

0
ответ дан 3 December 2019 в 02:53
поделиться

Вдохновленный этим вопросом, я задал аналогичный вопрос , где я предлагаю использовать GUID для генерации последовательности. Недостаток этого, как я отмечаю, заключается в том, что если в моей логике нет других недостатков, то это будет случайная последовательность от A до F и 10 цифр. Если вы можете смириться с тем фактом, что буквы от G до Z отсутствуют, это может быть для вас решением.

1
ответ дан 3 December 2019 в 02:53
поделиться

Метод Джоэла в порядке (за исключением целочисленной переменной цикла и использования "+" для конкатенации). (-:

Однако вывод можно сделать более интересным несколькими способами.

Во-первых, вы можете сгенерировать строки с таким же приблизительным частотным распределением, что и обычный английский текст, создав начальную строку со многими другими Символы Ee и Tt, а не символы Zz. Строка из 1000 символов (вдвое больше, если смешанный регистр) в это приблизительное сочетание подойдет.

Добавьте равное количество символов по 0..9 в любой другой соотношение, которое вы хотели бы видеть в окончательном выводе. Вы также можете перетасовать эту строку просмотра, чтобы она выглядела более случайной, но на самом деле это не имеет значения.

Затем используйте случайный селектор в диапазоне 1..Len ( seedstring), чтобы выбрать каждый символ, как в примере Джоэла.

Зачем это нужно? Нет веской причины, за исключением того, что результаты будут выглядеть более знакомыми.

Второй вариант - создать две такие исходные строки, одну из согласных с весом корпуса, а другую с гласными с одинаковым весом (больше E, чем O, чем U и т. Д.). Я бы использовал только один регистр, а не смешанный.

Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы создать орграфы, такие как TI, WO, DE и так далее. Объедините их вместе, чтобы образовать «слова».

Поскольку полученный результат можно произносить, его гораздо легче запомнить. К тому же он выглядит устрашающе японским. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

Второй вариант - создать две такие исходные строки, одну из согласных с весом корпуса, а другую с гласными с одинаковым весом (больше E, чем O, чем U, и т. Д.). Я бы использовал только один регистр, а не смешанный.

Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы создать орграфы, такие как TI, WO, DE и так далее. Объедините их вместе, чтобы образовать «слова».

Поскольку полученный результат можно произносить, его гораздо легче запомнить. К тому же он выглядит устрашающе японским. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

Второй вариант - создать две такие исходные строки, одну из согласных с весом корпуса, а другую с гласными с одинаковым весом (больше E, чем O, чем U, и т. Д.). Я бы использовал только один регистр, а не смешанный.

Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы создать орграфы, такие как TI, WO, DE и так далее. Объедините их вместе, чтобы образовать «слова».

Поскольку полученный результат можно произносить, его гораздо легче запомнить. К тому же он выглядит устрашающе японским. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

и т.д). Я бы использовал только один регистр, а не смешанный.

Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы создать орграфы, такие как TI, WO, DE и так далее. Объедините их вместе, чтобы образовать «слова».

Поскольку полученный результат можно произносить, его гораздо легче запомнить. К тому же он выглядит устрашающе японским. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

и т.д). Я бы использовал только один регистр, а не смешанный.

Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы создать орграфы, такие как TI, WO, DE и так далее. Объедините их вместе, чтобы образовать «слова».

Поскольку полученный результат можно произносить, его гораздо легче запомнить. К тому же он выглядит устрашающе японским. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

это выглядит устрашающе по-японски. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

это выглядит устрашающе по-японски. (-:

Наша библиотека Stamina (функции ASM для VB / VBA) имеет подпрограммы, которые делают эти вещи, но это достаточно просто в чистом VB.

1
ответ дан 3 December 2019 в 02:53
поделиться

Используя алгоритм Винко Врсаловича, вот функциональный код, спасибо и cya!

all_chars = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","S","T","U","V","W","X","Y","Z")
Randomize
for i = 1 to 4
   random_index = int(Rnd()*25)
clave = clave & all_chars(random_index) 
next
0
ответ дан 3 December 2019 в 02:53
поделиться

На самом деле вы не сказали, для чего вы это используете. Если вам нужны маленькие строки (<= 32 766), я думаю, что функция Джоэла будет работать нормально. Однако, если вам нужно что-то для генерации действительно больших строк, это может быть полезно. В моей системе он выполнит строку из 1000000 символов за 0,33291015625 секунд (да, я знаю ... кувалда :)). Также вы можете параметризовать набор символов, чтобы вам не приходилось менять код каждый раз, когда вы хотите сделать что-то особенное. ":):

Public Function RandomString( _
    ByVal length As Long, _
    Optional charset As String = "abcdefghijklmnopqrstuvwxyz0123456789" _
    ) As String
    Dim chars() As Byte, value() As Byte, chrUprBnd As Long, i As Long
    If length > 0& Then
        Randomize
        chars = charset
        chrUprBnd = Len(charset) - 1&
        length = (length * 2&) - 1&
        ReDim value(length) As Byte
        For i = 0& To length Step 2&
            value(i) = chars(CLng(chrUprBnd * Rnd) * 2&)
        Next
    End If
    RandomString = value
End Function
0
ответ дан 3 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: