7

これらのスレッドがたくさんあることは知っていますが、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
4

8 に答える 8

21

az 文字を含むように文字列を変更します。

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)

単一のランダム文字列ではなくランダム文字列を作成するため、関数内に乱数ジェネレーターを作成しないでください。あまりにも近い時間に関数を 2 回呼び出すと、ランダム ジェネレーターがシステム クロックを使用してシードされるため、同じランダム文字列になってしまいます。したがって、乱数発生器を関数に送信する必要があります。

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
于 2013-03-18T19:18:48.547 に答える
3

このようなことを試してください:-

stringToReturn&= Guid.NewGuid.ToString().replace("-","")

これを確認することもできます:-

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
于 2013-03-18T19:02:18.740 に答える
2

これを試してください:

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
于 2016-05-08T11:00:21.310 に答える
2

関数をガイドとして使用して、次のように変更しました。

  1. 長さをランダム化します (minChar と maxCharacters の間)
  2. 毎回生成される文字列をランダム化します (静的ランダムを使用して)

コード:

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
于 2013-03-18T19:16:12.513 に答える
0

注意してください

r.Next(0, 35)

ハングアップして同じ結果を表示する傾向がある 使用する方が良い

CInt(Math.Ceiling(Rnd() * N)) + 1

ここで参照してくださいVB.NETのランダム整数

于 2015-02-07T18:55:56.420 に答える
0

私の $.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
于 2013-03-18T19:41:29.290 に答える
0

For i As Integer = 1 To 8行をFor i As Integer = 1 To ?where ?に変更する必要があります。文字列の長さの文字数です。これにより、以下のコードを繰り返す回数が変更されるため、より多くの文字が文字列に追加されます。

    Dim idx As Integer = r.Next(0, 35)
    sb.Append(s.Substring(idx, 1))
于 2013-03-18T19:06:28.980 に答える