string 生成随机字符串
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15484742/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
generate random string
提问by kasf
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
好吧,我知道有很多这样的线程,但我是 vb.net 的新手,但我无法编辑给出的源代码来制作我真正想要的东西,所以我想要一个函数来生成随机字符串,每个字符串包含 15-32 个字符并且它们中的每一个都将具有以下字符(并非全部在同一个字符串中,而是其中一些):AZ az 0-9 这是我目前的代码
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
回答by Guffa
Change the string to include the a-z characters:
更改字符串以包含 az 字符:
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.
请注意,该Next
方法中的上限是独占的,因此Next(15, 33)
为您提供了一个范围为 15 到 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
回答by Rahul Tripathi
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
回答by Nathan Koop
Using your function as a guide, I modified it to:
以您的功能为指导,我将其修改为:
- Randomize the length (between minChar & maxCharacters)
- Randomize the string produced each time (by using the static Random)
- 随机化长度(在 minChar 和 maxCharacters 之间)
- 随机化每次产生的字符串(通过使用静态随机)
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
回答by HighTechProgramming15
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
回答by J. Scott Elblein
I beefed up Nathan Koop's function for my own needs, and thought I'd share.
我根据自己的需要加强了 Nathan Koop 的功能,并认为我会分享。
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
回答by user1937198
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.
你需要把线改For i As Integer = 1 To 8
到For i As Integer = 1 To ?
哪里?是字符串应该长的字符数。这会改变它重复下面代码的次数,因此更多的字符被附加到字符串。
Dim idx As Integer = r.Next(0, 35)
sb.Append(s.Substring(idx, 1))
回答by dbasnett
My $.02
我的 $.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
回答by Adil Al-Hilali
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
在这里看到它VB.NET 中的随机整数