VB密码生成代码输出全重复,如何得到10个不重复随机密码
问题原因
你当前的代码仅在所有循环执行前生成了1次随机密码,后续向ListBox添加内容的循环只是重复插入了同一个已经生成好的字符串,所以才会出现所有输出完全重复的问题。同时你需要输出10个密码,还需要调整密码生成的数量参数,额外增加去重逻辑避免极低概率下的随机重复问题。
修改后完整代码
Dim numKeys As Integer = 10 ' 修改为需要输出的10个密码 Dim chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*" Dim random = New Random() Dim existedPwd As New HashSet(Of String) ' 用于去重的集合 ListBox1.Items.Clear() ' 先清空ListBox原有内容 While existedPwd.Count < numKeys Dim stringChars = New Char(7) {} ' 每次生成新密码都初始化字符数组 For i As Integer = 0 To stringChars.Length - 1 stringChars(i) = chars.Chars(random.Next(chars.Length)) Next Dim finalString = New String(stringChars) ' 只有不存在的密码才会被加入集合,自动去重 If existedPwd.Add(finalString) Then ListBox1.Items.Add(finalString) End If End While
核心修改说明
- 将单条密码的生成逻辑移入多密码生成的循环内部,保证每轮循环都会生成新的随机密码
- 将密码生成数量
numKeys从8改为10,匹配你需要输出10个密码的需求 - 新增
HashSet(Of String)类型的去重集合,利用HashSet元素唯一的特性,避免极端情况下随机算法生成重复密码的问题,确保最终输出的10个密码全部互不重复 - 新增ListBox清空逻辑,避免多次运行时旧数据残留
内容的提问来源于stack exchange,提问作者Lider13
相关产品推荐
相关产品推荐

