大家看看我的密码生成的代码怎么样,给点意见
vb.net吧
全部回复
仅看楼主
level 1
感觉重复率好像有点高。
Imports System.Text
Module Module1
Sub Main()
Dim rnd1 As New Random
Dim builder As New StringBuilder()
Dim passWord As String = Nothing
Dim ctr As Integer
Dim possiblePassword As String = "qwertyuiopkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*(),.?"
possiblePassword.ToCharArray()
Dim c As Integer = Len(possiblePassword)
For i = 1 To 10
ctr = rnd1.Next(0, c)
passWord = possiblePassword(ctr)
Console.Write(passWord)
Next
Console.ReadLine()
End Sub
End Module
2017年08月17日 09点08分 1
level 11
请问你builder定义来干哈的?围观?
2017年08月17日 09点08分 2
[哈哈]builder本来想是用着把每次生成的字母连起来,后来发现,没必要,本来就是连着的。这个忘记去掉了
2017年08月17日 09点08分
level 11
另外,你是要生成10个字符串长度的密码还是一个字符串长度的密码?
2017年08月17日 09点08分 3
你这句话我不太明白。就是生成一个10位的密码,注册各种网站用
2017年08月17日 09点08分
回复
lenovothinkpod
:那请问你生成的10位密码保存到哪里了呢?
2017年08月17日 18点08分
@闪星2 码农都这么晚睡觉吗,我把又做了一个窗体的,贴到下面
2017年08月18日 03点08分
level 1
Public Class Form1
Dim rnd1 As New Random
Dim builder As New Text.StringBuilder()
Dim ctr As Byte
Dim passwordLength As Byte = 16
Dim passWord As String = Nothing
Dim possiblePassword As String = "qwertyuiopkjhgfdsazxcvbnm1234567890QWERTYUOPLKJHGFDSAZXCVBNM!@#$%^&*(),.?"
Dim c As Byte = Len(possiblePassword)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
possiblePassword.ToCharArray()
RadioButton2.Checked = True
Label1.Text = getPassword()
Clipboard.SetText(Label1.Text)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadioButton1.Checked = True Then
passwordLength = 10
End If
Label1.Text = getPassword()
Clipboard.SetText(Label1.Text)
End Sub
Function getPassword() As String
builder.Clear()
Randomize()
For i = 1 To passwordLength
ctr = rnd1.Next(0, c)
passWord = possiblePassword(ctr)
builder.Append(passWord)
Next
Return builder.ToString
End Function
End Class
2017年08月18日 03点08分 4
有bug[黑线] 你运行程序,选10,点生成,然后再选16,你运行瞧瞧生成的是几位的密码。。。
2017年08月18日 06点08分
@闪星2 果然,哈哈,我再改改
2017年08月18日 10点08分
level 1
搞定:
Public Class Form1
Dim rnd1 As New Random
Dim builder As New Text.StringBuilder()
Dim ctr As Byte
Dim passwordLength As Byte = 16
Dim passWord As String = Nothing
Dim possiblePassword As String = "qwertyuiopkjhgfdsazxcvbnm1234567890QWERTYUOPLKJHGFDSAZXCVBNM!@#$%^&*(),.?"
Dim c As Byte = Len(possiblePassword)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
possiblePassword.ToCharArray()
RadioButton2.Checked = True
Label1.Text = getPassword()
Clipboard.SetText(Label1.Text)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadioButton1.Checked = True Then
passwordLength = 10
Else
passwordLength = 16 ' 增加这一句就好了
End If
Label1.Text = getPassword()
Clipboard.SetText(Label1.Text)
End Sub
Function getPassword() As String
builder.Clear()
Randomize()
For i = 1 To passwordLength
ctr = rnd1.Next(0, c)
passWord = possiblePassword(ctr)
builder.Append(passWord)
Next
Return builder.ToString
End Function
End Class
2017年08月18日 11点08分 5
Randomize跟Random类没有毛线关系,不要把6.0的东西跟.net的东西搞混了,他们的机制不一样的。另外,你在6.0肯定也用不好Randomize,因为Randomize只在程序运行的时候执行一次就可以了,不需要每次都执行他。
2017年08月18日 11点08分
@闪星2 好,那我又省了一行代码[哈哈]。也就是说,正常Random生成的随机数不是重复的对吧?其实我没接触过VB6,只是之前自学过VBA
2017年08月18日 11点08分
回复
lenovothinkpod
:你瞧瞧帮助文档去
2017年08月18日 12点08分
2017年08月18日 13点08分
1