Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 生成随机字符串_Vb.net_String_Random - Fatal编程技术网

Vb.net 生成随机字符串

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

嗯,我知道有很多这样的线程,但我是vb.net的新手,但我不能编辑提供的源代码,使我真正想要的 因此,我需要一个函数来生成随机字符串,每个字符串包含15-32个字符,每个字符都有以下字符(不是所有字符都在同一个字符串中,而是其中的一些): A-Z a-z 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

试着这样做:-

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))

以您的功能为指导,我将其修改为:

  • 随机化长度(在minChar和maxCharacters之间)
  • 将每次生成的字符串随机化(使用静态随机)
  • 代码:


    更改字符串以包含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.天花
    。请查看链接到的答案的注释。