在VB.NET中生成随机字符串

6
我需要在vb.net中生成随机字符串,该字符串必须由(随机选择的)大写字母A-Z和随机插入的数字组成。它需要能够以固定长度生成它们。
谢谢帮助,这让我感到疯狂!
7个回答

18
如果您可以将此转换为VB.NET(这很简单),我认为您就准备好了(如果您不能,请使用此工具或任何其他值得的工具):
/// <summary>
/// The Typing monkey generates random strings - can't be static 'cause it's a monkey.
/// </summary>
/// <remarks>
/// If you try hard enough it will eventually type some Shakespeare.
/// </remarks>
class TypingMonkey
{
   private const string legalCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

   static Random random = new Random();

   /// <summary>
   /// The Typing Monkey Generates a random string with the given length.
   /// </summary>
   /// <param name="size">Size of the string</param>
   /// <returns>Random string</returns>
   public string TypeAway(int size)
   {
       StringBuilder builder = new StringBuilder();
       char ch;

       for (int i = 0; i < size; i++)
       {
           ch = legalCharacters[random.Next(0, legalCharacters.Length)];
           builder.Append(ch);
       }

       return builder.ToString();
    }
}

然后你需要做的就是:
TypingMonkey myMonkey = new TypingMonkey();
string randomStr = myMonkey.TypeAway(size);

你使用了小写字母和 .而且你还有 Snake Plissken 的风格。 :) - MusiGenesis
小写字母等都不见了。蛇皮普利斯肯永远不会消失 :) - JohnIdol
1
使用起来可能会有点麻烦,但它能正常工作并且让我感到愉悦。 - Cyclone
2
既然您已经知道数据的大小,最好使用该值初始化StringBuilder。这将避免不必要的内存分配。虽然答案很好,但我还是给它点赞。 - Phaedrus
喜欢这只猴子 - 我给它添加了单例模式,这样我只有一个而不是无限的供应。同时,我为你提供了一份奖励,以表彰你的出色、有用和有趣的回答。 - Carl Onager
显示剩余2条评论

4

为什么不随机生成1到26之间的数字,并获取相应的字母呢?

就像这样:

Dim output As String = ""
Dim random As New Random()
For i As Integer = 0 To 9
   output += ChrW(64 + random.[Next](1, 26))
Next

编辑:添加了ChrW。

编辑2:为了也包含数字

    Dim output As String = ""
    Dim random As New Random()

    Dim val As Integer
    For i As Integer = 0 To 9
        val = random.[Next](1, 36)
        output += ChrW(IIf(val <= 26, 64 + val, (val - 27) + 48))
    Next

你忘记了数字。 :) - MusiGenesis

2

C#

public string RandomString(int length)
{
    Random random = new Random();
    char[] charOutput = new char[length];
    for (int i = 0; i < length; i++)
    {
        int selector = random.Next(65, 101);
        if (selector > 90)
        {
            selector -= 43;
        }
        charOutput[i] = Convert.ToChar(selector);
    }
    return new string(charOutput);
}

VB.Net

Public Function RandomString(ByVal length As Integer) As String 
    Dim random As New Random() 
    Dim charOutput As Char() = New Char(length - 1) {} 
    For i As Integer = 0 To length - 1 
        Dim selector As Integer = random.[Next](65, 101) 
        If selector > 90 Then 
            selector -= 43 
        End If 
        charOutput(i) = Convert.ToChar(selector) 
    Next 
    Return New String(charOutput) 
End Function 

下次用这个吧,lol:http://www.developerfusion.com/tools/convert/csharp-to-vb/,这样我就不用了 ;) - Cyclone
嘿!我也链接了 - 而且我得到了猴子 ;) - JohnIdol
不客气,哈哈!它甚至可以转换回C#,这样你就可以在你的C#项目中使用我们的VB源代码了。John,我没看到链接啊,哈哈?但是你的猴子非常有趣,我不能否认! - Cyclone
如果你做不到,使用-->这个<--链接,虽然它并不重要;-) - JohnIdol
(除非在几毫秒内两次调用它且使用了相同的系统时间,否则)生成大约1000个文本片段,没有任何预定的暂停,哈哈。 - Cyclone
显示剩余5条评论

2

你认为如何:

Private Function GenerateString(len as integer) as String
        Dim stringToReturn as String=""
        While stringToReturn.Length<len
           stringToReturn&= Guid.NewGuid.ToString().replace("-","")
        End While
        Return left(Guid.NewGuid.ToString(),len)
End Sub

聪明。加上替换代码并处理长度超过1个GUID的字符串,我会给你点赞。 - MusiGenesis
1
дҢ з”љи‡іеЏҮд»ӨйЂљиү‡е°† .ToString() ж›өж”№дёғ .ToString("N") жқӨзњЃз•Ө Replace("-","") и°ѓз”ЁпәЊеЏ‚и§Ѓ http://msdn.microsoft.com/en-us/library/97af8hh4.aspx - w5l

1
这是一个实用类,我用它来生成随机密码。它类似于JohnIdol的Typing Monkey,但更加灵活,可以让你生成包含大写字母、小写字母、数字或特殊字符的字符串。
public static class RandomStringGenerator
{
    private static bool m_UseSpecialChars = false;

    #region Private Variables

    private const int m_MinimumLength = 8;
    private const string m_LowercaseChars = "abcdefghijklmnopqrstuvqxyz";
    private const string m_UppercaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private const string m_NumericChars = "123456890";
    private const string m_SpecialChars = "~?/@#!£$%^&*+-_.=|";

    #endregion

    #region Public Methods

    /// <summary>
    /// Generates string of the minimum length
    /// </summary>
    public static string Generate()
    {
        return Generate(m_MinimumLength);
    }

    /// <summary>
    /// Generates a string of the specified length
    /// </summary>
    /// <param name="length">The number of characters to generate</param>
    public static string Generate(int length)
    {
        return Generate(length, Environment.TickCount);
    }

    #endregion

    #region Private Methods

    /// <summary>
    /// Generates a string of the specified length using the specified seed
    /// </summary>
    private static string Generate(int length, int seed)
    {
        // Generated strings must contain at least 3 of the following character groups: uppercase letters, lowercase letters
        // numerals, and special characters (!, #, $, £, etc)

        // The generated string must be at least 4 characters  so that we can add a single character from each group.
        if (length < 4) throw new ArgumentException("String length must be at least 4 characters");

        StringBuilder SB = new StringBuilder();

        Random rand = new Random(seed);

        // Ensure that we add all of the required groups first
        SB.Append(GetRandomCharacter(m_LowercaseChars, rand));
        SB.Append(GetRandomCharacter(m_UppercaseChars, rand));
        SB.Append(GetRandomCharacter(m_NumericChars, rand));

        if (m_UseSpecialChars)
            SB.Append(GetRandomCharacter(m_SpecialChars, rand));

        // Now add random characters up to the end of the string
        while (SB.Length < length)
        {
            SB.Append(GetRandomCharacter(GetRandomString(rand), rand));
        }

        return SB.ToString();
    }

    private static string GetRandomString(Random rand)
    {
        int a = rand.Next(3);
        switch (a)
        {
            case 1:
                return m_UppercaseChars;
            case 2:
                return m_NumericChars;
            case 3:
                return (m_UseSpecialChars) ? m_SpecialChars : m_LowercaseChars;
            default:
                return m_LowercaseChars;
        }
    }

    private static char GetRandomCharacter(string s, Random rand)
    {
        int x = rand.Next(s.Length);

        string a = s.Substring(x, 1);
        char b = Convert.ToChar(a);

        return (b);
    }

    #endregion
}

使用它:

string a = RandomStringGenerator.Generate();   // Generate 8 character random string
string b = RandomStringGenerator.Generate(10); // Generate 10 character random string

这段代码是用C#编写的,但使用代码转换器将其转换为VB.NET应该相当容易。


0

简单点,对于VB只需这样做:

Public Function RandomString(size As Integer, Optional validchars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz") As String
    If size < 1 Or validchars.Length = 0 Then Return ""
    RandomString = ""
    Randomize()
    For i = 1 To size
        RandomString &= Mid(validchars, Int(Rnd() * validchars.Length) + 1, 1)
    Next
End Function

该函数允许使用一组基本字符子集或用户可以选择任何内容。例如,您可以发送ABCDEF0123456789并获得随机十六进制,或者发送"01"获取二进制。

0

试试这个,它已经转换成VB的顶级答案了!

Private Function randomStringGenerator(size As Integer)
    Dim random As Random = New Random()
    Dim builder As Text.StringBuilder = New Text.StringBuilder()
    Dim ch As Char
    Dim legalCharacters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"

    For cntr As Integer = 0 To size
        ch = legalCharacters.Substring(random.Next(0, legalCharacters.Length), 1)
        builder.Append(ch)
    Next
    Return builder.ToString()
End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接