首页 > 解决方案 > 生成密码

问题描述

我需要生成不重复且不具有相同连续数字的密码,除了长度为 8 位之外,只有数字。所有这一切都在 Visual Basic 中用于 Excel 应用程序。

标签: excelvba

解决方案


好吧,如果你只想要数字,0 到 9 之间的随机数可以通过Int(Rnd() * 10).
Int() 向下取整,Rnd() 返回一个介于 0 和 <1 之间的数字。
如果您然后循环该 8 次并将数字彼此相加(使用&而不是+)并If检查最后一个添加的值到我们要添加的值,那么您将拥有一个 8 位数字,没有重复数字。

然后,您只需将它们打印或保存在某处。

就像是:

Sub random()
Dim test As Long, ran As Long, i As Long, j As Long
For j = 1 To 500 '- Amount of numbers to print
    ran = 0
    For i = 1 To 8 '- Length of random number
        test = Int(Rnd() * 10)
        If test = Right(ran, 1) Then
            i = i - 1 '-Same number, try again
        Else
            ran = ran & test '-New number, add this
        End If
    Next i
    Range("A" & Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row).Value = ran '- Print on last row of column "A"
Next j
Range("A:A").RemoveDuplicates Columns:=1 '- Remove duplicates from column "A"
End Sub

然后,这将打印 500 个随机 8 位数字,从A2或 column 中的最后一个空单元格开始A。然后继续删除重复项。

您可以每次检查重复项,从而确保您最终得到指定数量的数字。但它非常慢,而且获得重复的机会非常小(10.000 个数字的测试运行对我来说只有一个重复)。


推荐阅读