在文本字段中生成随机字符串

Posted

技术标签:

【中文标题】在文本字段中生成随机字符串【英文标题】:Generate random string in text field 【发布时间】:2014-03-25 09:28:37 【问题描述】:

我们公司拥有使用 Microsoft Access 运行的旧软件(由多年前的第一批员工之一制作)。老板让我在单击时在特定文本框中添加随机字符串生成,但我不知道该怎么做。我没有任何 Microsoft Access 编程经验,所以我请你帮忙。

到目前为止,我设法创建了按钮和文本字段。那就是它停止的地方。我还设法访问了按钮操作的代码:

Private Sub command133_Click()

End Sub

【问题讨论】:

@Bathsheba 字母和数字,比如说 8 个字符长 您要大小写字母吗?我给出的答案仅适用于大写字母。 @Bathsheba 是的,如果不是太多工作,也可以使用小写字母 + 数字 :) 我已经修改:现在生成字母和数字 @Bathsheba 谢谢 :) 将尝试了解它的工作原理并学习新的东西,而不仅仅是复制它。 【参考方案1】:

这是一种方法,适用于 Access VBA(比 vb.net 更早的基础版本)。它将生成一个带有字母和数字的字符串。

Sub test()

    Dim s As String * 8 'fixed length string with 8 characters
    Dim n As Integer
    Dim ch As Integer 'the character
    For n = 1 To Len(s) 'don't hardcode the length twice
        Do
            ch = Rnd() * 127 'This could be more efficient.
            '48 is '0', 57 is '9', 65 is 'A', 90 is 'Z', 97 is 'a', 122 is 'z'.
        Loop While ch < 48 Or ch > 57 And ch < 65 Or ch > 90 And ch < 97 Or ch > 122
        Mid(s, n, 1) = Chr(ch) 'bit more efficient than concatenation
    Next

    Debug.Print s

End Sub

【讨论】:

+1,作为替代方案,我将使用额外的 rand 值来确定从哪个范围生成 ch。想法来自这里:***.com/questions/22506271/randbetween1-11-but-not-6/… 嗨@Bathsheba,只是一个反馈。我在 Excel 中测试您的代码是否有 13 个字符的随机字符串长度。在 100 万行中,excel 创建了 13,826 个重复的字符串,只剩下 986,174 个唯一的字符串。在大多数情况下它可能足够独特,但我认为 Rnd() 函数存在缺陷。理论上,在 62 个字符和数字(0-9 a-z A-Z)的组中随机选择 13 个字符和数字,应该有超过 83 亿个独特的选择。因此,100 万条记录中的 14k 条重复记录非常重要。有吗?感谢您的代码。 唯一随机是完全不同的要求。你是对的,Rnd()周期性非常小。 也许你应该在调用Rnd()之前添加Randomize【参考方案2】:

试试这个功能:

Public Function GetRandomString(ByVal iLength As Integer) As String
    Dim sResult As String = ""
    Dim rdm As New Random()

    For i As Integer = 1 To iLength
        sResult &= ChrW(rdm.Next(32, 126))
    Next

    Return sResult
End Function

【讨论】:

关于 Access VBA 的问题,而不是 VB.NET 是的,但是在提交此答案之后编辑了标签。它在 vb.net 中工作,所以 +1。【参考方案3】:

在@Bathsheba 代码上工作,我做到了。它将生成一个包含您想要的字符数的随机字符串。

代码:

Public Function GenerateUniqueSequence(numberOfCharacters As Integer) As String

    Dim random As String  ' * 8 'fixed length string with 8 characters
    Dim j As Integer
    Dim ch As Integer   ' each character

    random = ""

    For j = 1 To numberOfCharacters
        random = random & GenerateRandomAlphaNumericCharacter
    Next

    GenerateUniqueSequence = random

End Function

Public Function GenerateRandomAlphaNumericCharacter() As String

    'Numbers : 48 is '0', 57  is '9'
    'LETTERS : 65 is 'A', 90  is 'Z'
    'letters : 97 is 'a', 122 is 'z'

    GenerateRandomAlphaNumericCharacter = ""

    Dim i As Integer

    Randomize
    i = (Rnd() * 2) + 1 'One chance out of 3 to choose one of 3 catégories

    Randomize
    Select Case i
        Case 1 'Numbers
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 9 + 48)
        Case 2 'LETTERS
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 65)
        Case 3 'letters
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 97)
    End Select

End Function

我将它与随机数量的字符一起使用,如下所示:

'Generates random Session ID between 15 and 30 alphanumeric characters
SessionID = GenerateUniqueSequence(Rnd * 15 + 15)

结果:

s8a8qWOmoDvC4jKRjPr5hOY12u 26 TB24qZ4cNfr6EdyY0J 18 6LZRQ9P5WHLNd71LIdqJ 20 KPN0RmlhhJKnVzPTkW 18 R2pNOKWJMKl9KpSoIV2egUNTEb1QC2 30 X8jHuupP6SvEI8Dt2wJi 20

注意:这仍然不是完全随机的。它会提供比正常数量更多的数字,因为大约 1/3 生成的字符将是数字。

正态分布如下所示: 10 个数字加上 26 个小写字母加上 26 个大写字母 = 62 个可能的字符。 数字通常是字符串的 10/62 部分或 1/6.2 用代码 i = (Rnd() * 2) + 1 '有 3 个机会选择 3 个类别之一 数字的计数被推高到 1/3(平均)

可能不必太担心 - 除非您试图击败 NSA,然后您的射程显着降低。

【讨论】:

以上是关于在文本字段中生成随机字符串的主要内容,如果未能解决你的问题,请参考以下文章

在Java中生成一个随机字符串[关闭]

如何在 Matlab 中生成随机字符串?

如何在Java中生成随机字符串[重复]

在java中生成随机字符串[重复]

ruby 在ruby中生成随机字符串

ruby 在ruby中生成随机字符串