以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]生成的随机数全是英文字母?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=187612)

--  作者:2425004926
--  发布时间:2023/7/30 21:48:00
--  [求助]生成的随机数全是英文字母?
生成的随机数全是英文字母?

Rand.NextString(6)
这样生成的随机数有字母有数字,是否有更简单的方法让生成的随机数全是英文字母?

--  作者:有点蓝
--  发布时间:2023/7/30 21:59:00
--  
把所有字母放到一个字符串里,随机从这个字符串里取6个字符
--  作者:chen37280600
--  发布时间:2023/7/30 23:27:00
--  
chatgpt回复

要在VB.NET中生成指定长度的纯字母的随机字符串,可以使用随机数生成器和字符集来实现。下面是一个示例代码,它将生成一个指定长度的纯字母随机字符串:

```vb.net
Imports System.Text
Imports System.Security.Cryptography

Module Module1
    Sub Main()
        Dim length As Integer = 10 \' 指定字符串长度
        Dim randomString As String = GenerateRandomString(length)
        Console.WriteLine(randomString)
    End Sub

    Private Function GenerateRandomString(ByVal length As Integer) As String
        Const chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
        Dim result As New StringBuilder(length)
        Dim rng As New RNGCryptoServiceProvider()
        Dim data(length - 1) As Byte

        rng.GetBytes(data)

        For i As Integer = 0 To length - 1
            Dim rndIndex As Integer = data(i) Mod chars.Length
            result.Append(chars(rndIndex))
        Next

        Return result.ToString()
    End Function
End Module
```

这个代码使用了 `RNGCryptoServiceProvider` 类来生成安全的随机字节序列,然后根据字节序列中的值从字符集中选择字符来构建随机字符串。字符集 `chars` 包含所有的大写字母和小写字母。

请注意,由于 `RNGCryptoServiceProvider` 生成的是真正的随机字节,因此生成的随机字符串是高度随机的,并且比简单的伪随机算法更安全。

--  作者:2425004926
--  发布时间:2023/7/31 7:45:00
--  
谢谢chen37280600
谢谢蓝总!
明白了!

--  作者:2425004926
--  发布时间:2023/7/31 8:22:00
--  
代码如下:

Dim x As String
Dim zm As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
For i As Integer = 1 To 6
    Dim rn As Integer = Rand.Next(0, 51)
    x += zm.Chars(rn)
Next
Output.Show(x)

--  作者:2425004926
--  发布时间:2023/7/31 8:28:00
--  
 打包成自定义函数
‘函数名RandLetter
Dim x As String
Dim zm As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
For i As Integer = 1 To Args(0)
    Dim rn As Integer = Rand.Next(0, 51)
    x += zm.Chars(rn)
Next
Return x

调用
Dim x As String = Functions.Execute("RandLetter", 10) ’第一个参数是字母随机数的位数
Output.Show(x)