generate random string

拟墨画扇 提交于 2020-01-02 04:13:48

问题


well i know that there are a lot of these threads but im new to vb.net yet i cant edit the sources given to make what i really want so i want a function that will generate random strings which will contain from 15-32 characters each and each of them will have the following chars ( not all at the same string but some of them ) : A-Z a-z 0-9 here is my code so far

Functon RandomString()
    Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    Dim r As New Random
    Dim sb As New StringBuilder
    For i As Integer = 1 To 8
        Dim idx As Integer = r.Next(0, 35)
        sb.Append(s.Substring(idx, 1))
    Next
    return sb.ToString()
End Function

回答1:


Change the string to include the a-z characters:

Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

Change the loop to create a random number of characters:

Dim cnt As Integer = r.Next(15, 33)
For i As Integer = 1 To cnt

Note that the upper boundary in the Next method is exclusive, so Next(15, 33) gives you a value that can range from 15 to 32.

Use the length of the string to pick a character from it:

Dim idx As Integer = r.Next(0, s.Length)

As you are going to create random strings, and not a single random string, you should not create the random number generator inside the function. If you call the function twice too close in time, you would end up with the same random string, as the random generator is seeded using the system clock. So, you should send the random generator in to the function:

Function RandomString(r As Random)

So, all in all:

Function RandomString(r As Random)
  Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  Dim sb As New StringBuilder
  Dim cnt As Integer = r.Next(15, 33)
  For i As Integer = 1 To cnt
    Dim idx As Integer = r.Next(0, s.Length)
    sb.Append(s.Substring(idx, 1))
  Next
  return sb.ToString()
End Function

Usage example:

Dim r As New Random
Dim strings As New List<string>()
For i As Integer = 1 To 10
  strings.Add(RandomString(r))
Next



回答2:


Try something like this:-

stringToReturn&= Guid.NewGuid.ToString().replace("-","")

You can also check this:-

Sub Main()
        Dim KeyGen As RandomKeyGenerator
        Dim NumKeys As Integer
        Dim i_Keys As Integer
        Dim RandomKey As String

        ''' MODIFY THIS TO GET MORE KEYS    - LAITH - 27/07/2005 22:48:30 -
        NumKeys = 20

        KeyGen = New RandomKeyGenerator
        KeyGen.KeyLetters = "abcdefghijklmnopqrstuvwxyz"
        KeyGen.KeyNumbers = "0123456789"
        KeyGen.KeyChars = 12
        For i_Keys = 1 To NumKeys
            RandomKey = KeyGen.Generate()
            Console.WriteLine(RandomKey)
        Next
        Console.WriteLine("Press any key to exit...")
        Console.Read()
    End Sub



回答3:


Using your function as a guide, I modified it to:

  1. Randomize the length (between minChar & maxCharacters)
  2. Randomize the string produced each time (by using the static Random)

Code:

Function RandomString(minCharacters As Integer, maxCharacters As Integer)
    Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    Static r As New Random
    Dim chactersInString As Integer = r.Next(minCharacters, maxCharacters)
    Dim sb As New StringBuilder
    For i As Integer = 1 To chactersInString
        Dim idx As Integer = r.Next(0, s.Length)
        sb.Append(s.Substring(idx, 1))
    Next
    Return sb.ToString()
End Function



回答4:


You need to change the line For i As Integer = 1 To 8 to For i As Integer = 1 To ? where ? is the number of characters long the string should be. This changes the number of times it repeats the code below so more characters are appended to the string.

    Dim idx As Integer = r.Next(0, 35)
    sb.Append(s.Substring(idx, 1))



回答5:


My $.02

Dim prng As New Random
Const minCH As Integer = 15 'minimum chars in random string
Const maxCH As Integer = 35 'maximum chars in random string

'valid chars in random string
Const randCH As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

Private Function RandomString() As String
    Dim sb As New System.Text.StringBuilder
    For i As Integer = 1 To prng.Next(minCH, maxCH + 1)
        sb.Append(randCH.Substring(prng.Next(0, randCH.Length), 1))
    Next
    Return sb.ToString()
End Function



回答6:


please note that the

r.Next(0, 35)

tend to hang and show the same result Not sure whay; better to use

CInt(Math.Ceiling(Rnd() * N)) + 1

see it here Random integer in VB.NET




回答7:


Try this out:

Private Function RandomString(ByRef Length As String) As String
    Dim str As String = Nothing
    Dim rnd As New Random
    For i As Integer = 0 To Length
        Dim chrInt As Integer = 0
        Do
            chrInt = rnd.Next(30, 122)
            If (chrInt >= 48 And chrInt <= 57) Or (chrInt >= 65 And chrInt <= 90) Or (chrInt >= 97 And chrInt <= 122) Then
                Exit Do
            End If
        Loop
        str &= Chr(chrInt)
    Next
    Return str
End Function



回答8:


I beefed up Nathan Koop's function for my own needs, and thought I'd share.

I added:

  • Ability to add Prepended and Appended text to the random string
  • Ability to choose the casing of the allowed characters (letters)
  • Ability to choose to include/exclude numbers to the allowed characters

NOTE: If strictly looking for an exact length string while also adding pre/appended strings you'll need to deal with that; I left out any logic to handle that.

Example Usages:

' Straight call for a random string of 20 characters
' All Caps + Numbers
String_Random(20, 20, String.Empty, String.Empty, 1, True)

' Call for a 30 char string with prepended string
' Lowercase, no numbers
String_Random(30, 30, "Hey_Now_", String.Empty, 2, False)

' Call for a 15 char string with appended string
' Case insensitive + Numbers
String_Random(15, 15, String.Empty, "_howdy", 3, True)

.

Public Function String_Random(
    intMinLength As Integer,
    intMaxLength As Integer,
    strPrepend As String,
    strAppend As String,
    intCase As Integer,
    bIncludeDigits As Boolean) As String

    ' Allowed characters variable
    Dim s As String = String.Empty

    ' Set the variable to user's choice of allowed characters
    Select Case intCase

        Case 1

            ' Uppercase
            s  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        Case 2

            ' Lowercase
            s = "abcdefghijklmnopqrstuvwxyz"                

        Case Else

            ' Case Insensitive + Numbers
            s  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 

    End Select

    ' Add numbers to the allowed characters if user chose so
    If bIncludeDigits = True Then s &= "0123456789"

    Static r As New Random

    Dim chactersInString As Integer = r.Next(intMinLength, intMaxLength)
    Dim sb As New StringBuilder

    ' Add the prepend string if one was passed
    If String.IsNullOrEmpty(strPrepend) = False Then sb.Append(strPrepend)

    For i As Integer = 1 To chactersInString

        Dim idx As Integer = r.Next(0, s.Length)

        sb.Append(s.Substring(idx, 1))

    Next

    ' Add the append string if one was passed
    If String.IsNullOrEmpty(strAppend) = False Then sb.Append(strAppend)

    Return sb.ToString()

End Function


来源:https://stackoverflow.com/questions/15484742/generate-random-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!