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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 01:52:14  来源:igfitidea点击:

generate random string

vb.netstringrandom

提问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 Nextmethod 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:

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

  1. Randomize the length (between minChar & maxCharacters)
  2. Randomize the string produced each time (by using the static Random)
  1. 随机化长度(在 minChar 和 maxCharacters 之间)
  2. 随机化每次产生的字符串(通过使用静态随机)

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 8to 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 8For 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 中的随机整数