Я с трудом пытаюсь понять, что вы хотите сделать с этой строкой кода, но вот мой шанс. Он вернет Boolean = False
только в том случае, если A1
пусто, а A2
нет, или если A1
не пусто, но A2
равно.
If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
Boolean = False
End If
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 безопасен, таким образом, функция как это не должна использоваться для генерации паролей.
Я забыл весь свой 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!
Таким образом, это - просто вопрос обнаружения, как создать массив и заполнить его символами, как получить длину массива и как получить случайное число между первыми и последними индексами упомянутого массива.
Ну, все это и цикличное выполнение, конечно.
Использование рандомизирует
Интервал (Rnd * верхняя граница) + (нижняя граница) генерирует случайное число
Генерируйте массив со значениями от asc ("a") к asc ("z") и от asc ("0") к asc ("9")
Генерируйте случайное число между 1 и 26 (10+26) и ищите его в массиве.
Не имейте VB6 установленным больше.
Вдохновленный этим вопросом, я задал аналогичный вопрос , где я предлагаю использовать GUID для генерации последовательности. Недостаток этого, как я отмечаю, заключается в том, что если в моей логике нет других недостатков, то это будет случайная последовательность от A до F и 10 цифр. Если вы можете смириться с тем фактом, что буквы от G до Z отсутствуют, это может быть для вас решением.
Метод Джоэла в порядке (за исключением целочисленной переменной цикла и использования "+" для конкатенации). (-:
Однако вывод можно сделать более интересным несколькими способами.
Во-первых, вы можете сгенерировать строки с таким же приблизительным частотным распределением, что и обычный английский текст, создав начальную строку со многими другими Символы 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.
Используя алгоритм Винко Врсаловича, вот функциональный код, спасибо и 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
На самом деле вы не сказали, для чего вы это используете. Если вам нужны маленькие строки (<= 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