Vb6 Как создать случайную строчку 0-9 и a-z символов x
Попытка создать случайную строку, x символов длиной, используя 0-9 и a-z/A-Z, и, похоже, не может найти хороший пример, любые идеи?
Ответы
Ответ 1
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
Помните, что встроенный генератор случайных чисел не защищен криптографически, поэтому для генерации паролей не следует использовать такую функцию.
Ответ 2
Я забыл все свои 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!
Итак, это просто вопрос о том, как создать массив и заполнить его символами, как получить длину массива и как получить случайное число между первым и последним индексами указанного массива.
Ну, все это и цикл, конечно.
Ответ 3
Метод Joel хорош (за исключением целочисленной переменной цикла и с помощью "+" для конкатенации). (-:
Однако вывод может быть сделан более интересным несколькими способами.
Во-первых, вы можете создавать строки, которые имеют такое же приблизительное частотное распределение, как и обычный текст на английском языке, путем создания семенной строки со многими другими символами Ee и Tt, чем символы Zz. Строка может составлять 1000 символов (в два раза, если в смешанном случае) в этот примерный микс будет работать нормально.
Добавьте равное количество 0..9 символов в любом соотношении, которое вы хотели бы видеть в конечном результате. Вы также можете перетасовать эту строку, чтобы сделать ее более случайной, но это не имеет большого значения.
Затем используйте случайный селектор в диапазоне 1..Len(seedstring), чтобы выбрать каждый символ, как в примере Джоэля.
Зачем? Нет веской причины, за исключением того, что результаты будут более знакомы.
Второй вариант состоит в том, чтобы сгенерировать две такие семенной строки, один из согласных в весе корпуса, а второй с гласными в том же взвешивании (больше E, чем O, чем U и т.д.). Я бы использовал только один случай, а не смешанный случай.
Затем чередуйте два случайных выбора, сначала из согласных, затем из гласных, чтобы генерировать орграфы, такие как TI, WO, DE и т.д. Соедините их вместе, чтобы сформировать "слова".
Поскольку результирующий вывод является произносимым, он гораздо легче запоминается. Кроме того, он выглядит странно японским. (-:
Наша библиотека Stamina (функции ASM для VB/VBA) имеет подпрограммы, которые делают это, но это достаточно просто в чистом VB.
Ответ 4
Вдохновленный этим вопросом, я задал аналогичный вопрос, где я предлагаю использовать GUID для генерации последовательности. Короткое пришествие этого, как я указываю, состоит в том, что, если в моей логике нет других недостатков, это будет случайная последовательность от A до F и 10 цифр. Если вы можете жить с тем, что буквы G по Z отсутствуют, это может быть для вас решением.
Ответ 5
Использовать Randomize
Int (Rnd * высокая граница) + (низкая граница) сгенерирует случайное число
Создайте массив со значениями от asc ("a") до asc ("z") и от asc ("0") до asc ("9")
Генерация случайного числа от 1 до 26 (10 + 26) и поиск его в массиве.
У меня больше нет VB6.
Ответ 6
Используя алгоритм Vinko Vrsalovic, вот код funcionay, спасибо и 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
Ответ 7
Вы действительно не говорили, для чего вы это использовали. Если вам нужны маленькие строки (< = 32,766), я думаю, что функция Joel будет работать нормально. Однако, если вам нужно что-то для создания действительно больших строк, это может быть полезно. В моей системе он выполнит 1000 000 строк char в 0.33291015625 секунд (да, я знаю... sledgehammer:)) Также вы можете параметризовать набор символов, чтобы вам не приходилось менять код каждый раз, когда вы хотите что-то сделать "special":):
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
Ответ 8
Если вы используете базу данных SQL, вы можете создать PrimaryKey следующим образом:
SELECT NEWID() as KeyValue
Это очень хороший способ, а также очень безопасный.