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

Это очень хороший способ, а также очень безопасный.