Reputation: 113
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
Upvotes: 8
Views: 48825
Reputation: 1
Try this function, it creates Random String every time.
Public Function RandomString_Gen(ByVal intLength As Integer) As String
Dim strAllowedCharacters As String = "B6JFJVKFRFPFCR6H4QBFGUJGBQCR6JF24ARY3CJFBFYAFY3AR6JFAR6J4ME6A6J6RAY6RUEVKJFY3CB6JFJFBFYAFY3AR6AUAFY6JYY3EBY4J6443YFY36J6AUAFY6JYY3R6JYFPJQGR6JFUE6JF3C6JFAJEJVKFRFPF3GY4CPJFYFYFYAFY3AR6JFAR6JCFYY3CBAPR6JUEVKJFY3CB6JFJFBFYAFY3AR6JFAR6J4ME6A6J6RAY6R6443YFY36J6AUAFY6JYY3EBY4JFY3CBAPR6JUEVKJFY3CB6JFJFBFYAFY3AR6JFAR6J4ME6BFYAFY36JFUEFGUJGBQECY3RU3GY4CPJFY6J6RAY6FY6JYY3EBY4JFY3CBAPR6JUEVKJFY3CUEVKJFY3CB6JFJFJVKFRFPFCR6H4QBFGUJGBQCR6JF24ARY3CBFYAFY3AR6AUAFY6JYY3E6RAY6RUEVKJFY3CB6JFJFBFYAFY3AR6AUAFY6JYY3EBY4J6443YFY36J6AUAFY6JYY3R6JYFPJQGR6JFUE6JF3C6BY4JB6JFJFBF6443YFY36J6AUAFY6JYY3R6JYFFY3CB6JFJFBFYAFY3AR6JFAR6J4ME6A6J6RAY6R6443YFY36J6AUAFY6JYY3EBY4JFY3CBAPR6JUEVKJFY3CB6JFJFBFYAFY3AR6JFAR6J4ME6BFYAFY36JFUEFGUJGBQECY3RU3GY4PJF4PAAAJFRJVKFRFPFCR6H4QBFGUJGBQCR6JF24ARY3CB6QGY4FYQPYY36PJJ6CBAQGY6FUJ6CBRPR6JFAR3CB6QGRCBAPR6JUEVKJFY3CB6JFJFBFYY36J6AUAFY6JYY3R6JYFPJF4PAAAJFRJAFY3AR6JFAR6J4ME6A6J6RAY6R6443YFY36J6ME6A6J6RAY6R6443YFY36J6AUAFYB6JFJFBFYAFY3AR6JFAR6J4ME6A6J6RAY6R6443YFY36J6AUAFY6JYY3R6JYFPJQGR6JFUE6JF3C6JFAJEJVKFRFPF3GY4CP6JYY3EBY4JFY3CBAPR6JUEVKJFY3CB6JFJFBFYAFY3AR6AUAFY6JYY3EBY4JFY3CBAPR6JUEVKJFY3CB6JVKFRFPFCR6H4QBFGUJGBQCR6JF24ARY3CJFJFBFYAFY36JFUEFGUJGBQECY3RU3GY4CPJFYFYCFY3EBY4JFY3CBE6A6J6RAY6R6443YFY36J6AUAFY6JYY3R6JYFPJF4PAAAJFRJVKFRFPFCR6H4QBFGUAPR6JUEVKY3R6JYFPJF4PAAAJFR6PJJ6CBAQGY6FUJ6CBRPJVKFRFPFCR6H4QBFGUJGBQCR6JF24ARY3CR6JFAR3CB6PR6JUEVKJFY3CB6JFJFBFYAFY3AR6JFAR6J4ME6A6J6RAY6R6443YFY36J6AUAFY6JYY3RY36J6AUAFY6JYY3R6JYFPJF4PAAAJFRJJYFPJQGR6JFUE6JF3C6JFAJEJVKFRFPF3GY4CP"
Dim rndm As New Random
Dim StartInt As Integer = rndm.Next(1, 176)
Dim LengthInt As Integer = rndm.Next(200, 576)
strAllowedCharacters = strAllowedCharacters.Substring(StartInt, LengthInt)
Dim chrChars() As Char = strAllowedCharacters.ToCharArray
Dim strReturn As New StringBuilder()
Do Until Len(strReturn.ToString) = intLength
Dim x As Integer = Rnd() * (chrChars.Length - 1)
strReturn.Append(chrChars(CInt(x)))
Loop
Return strReturn.ToString
End Function
Upvotes: 0
Reputation: 4253
I beefed up Nathan Koop's function for my own needs, and thought I'd share.
I added:
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
Upvotes: 0
Reputation: 343
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
Upvotes: 2
Reputation: 700162
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
Upvotes: 23
Reputation: 41
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
Upvotes: 0
Reputation: 11773
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
Upvotes: 0
Reputation: 25197
Using your function as a guide, I modified it to:
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
Upvotes: 2
Reputation: 172378
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
Upvotes: 3
Reputation: 5348
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))
Upvotes: 0