Vb.net 生成随机字符串
嗯,我知道有很多这样的线程,但我是vb.net的新手,但我不能编辑提供的源代码,使我真正想要的 因此,我需要一个函数来生成随机字符串,每个字符串包含15-32个字符,每个字符都有以下字符(不是所有字符都在同一个字符串中,而是其中的一些): A-Z a-z 0-9 这是到目前为止我的代码Vb.net 生成随机字符串,vb.net,string,random,Vb.net,String,Random,嗯,我知道有很多这样的线程,但我是vb.net的新手,但我不能编辑提供的源代码,使我真正想要的 因此,我需要一个函数来生成随机字符串,每个字符串包含15-32个字符,每个字符都有以下字符(不是所有字符都在同一个字符串中,而是其中的一些): A-Z a-z 0-9 这是到目前为止我的代码 Functon RandomString() Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" Dim r As New Rand
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
试着这样做:-
stringToReturn&= Guid.NewGuid.ToString().replace("-","")
您还可以检查:-
您需要将i As Integer=1的行
改为8
改为For i As Integer=1改为?
在哪里?字符串应包含的字符数。这会更改它重复下面代码的次数,以便在字符串中追加更多字符
Dim idx As Integer = r.Next(0, 35)
sb.Append(s.Substring(idx, 1))
以您的功能为指导,我将其修改为:
更改字符串以包含a-z字符:
Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Dim cnt As Integer = r.Next(15, 33)
For i As Integer = 1 To cnt
更改循环以创建随机数目的字符:
Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Dim cnt As Integer = r.Next(15, 33)
For i As Integer = 1 To cnt
请注意,Next
方法中的上边界是独占的,因此Next(15,33)
为您提供了一个范围为15到32的值
使用字符串的长度从中拾取字符:
Dim idx As Integer = r.Next(0, s.Length)
由于要创建随机字符串,而不是单个随机字符串,因此不应在函数内部创建随机数生成器。如果调用该函数两次的时间太近,则最终将得到相同的随机字符串,因为随机生成器是使用系统时钟进行种子设定的。因此,您应该将随机生成器发送到函数:
Function RandomString(r As Random)
总而言之:
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
用法示例:
Dim r As New Random
Dim strings As New List<string>()
For i As Integer = 1 To 10
strings.Add(RandomString(r))
Next
Dim r作为新的随机变量
将字符串设置为新列表()
对于i,作为整数=1到10
字符串。添加(随机字符串(r))
下一个
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
请注意
r.Next(0, 35)
倾向于悬挂和显示相同的结果,不确定是什么;更好地使用
CInt(Math.Ceiling(Rnd() * N)) + 1
请参见此处尝试一下:
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
私有函数RandomString(ByRef长度为String)为String
Dim str As String=Nothing
Dim rnd作为新的随机变量
对于i,作为整数=0到长度
Dim chrInt作为整数=0
做
chrInt=rnd.Next(30122)
如果(chrInt>=48和chrInt=65和chrInt=97和chrInt,我会根据自己的需要增强Nathan Koop的功能,并想与大家分享
我补充道:
' 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)
- 能够向随机字符串添加带前缀和附加的文本
- 能够选择允许字符(字母)的大小写
- 能够选择将数字包含/排除到允许的字符
注意:如果严格地寻找一个精确长度的字符串,同时添加预/附加字符串,则需要处理该问题;我省略了处理该问题的任何逻辑
用法示例:
' 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)
guid不会使用字母G-ZOne-liner guid。NewGuid.ToString()很有用!如果将Next
方法设置为“挂起”,则可能是创建的新随机生成器的时间太短。不要像那样使用Math.天花
。请查看链接到的答案的注释。