0

我有以下代码:

Imports System.Web.Security

Public Class Form1
    Dim symbols As Integer = 0

    Private Sub cbSymbols_CheckedChanged(sender As Object, e As EventArgs) Handles cbSymbols.CheckedChanged
        If cbSymbols.CheckState = 1 Then
            symbols = 1
        ElseIf cbSymbols.CheckState = 0 Then
            symbols = 0
        End If
    End Sub

    Private Sub btnGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerate.Click
        Dim password As String = Membership.GeneratePassword(ComboBox1.SelectedIndex + 6, symbols)
        Label1.Text = password
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Font = New Font("Arial", 14)
        If ComboBox1.Items.Count > 0 Then
            ComboBox1.SelectedIndex = 0    ' The first item has index 0 '
        End If
    End Sub
End Class

但是,无论我的复选框 (cbSymbols) 是否被选中,我的密码在勾选时都有 1 个符号,而未勾选时有 2 个符号。任何人都可以帮我诊断这个问题和/或改进我的代码吗?谢谢。

4

1 回答 1

1

来自MSDN

Public Shared Function GeneratePassword ( _
    length As Integer, _
    numberOfNonAlphanumericCharacters As Integer _
) As String

numberOfNonAlphanumericCharactersType:生成的密码中非字母数字字符(如@、#、!、%、& 等)的最小数量。

这就解释了为什么你会得到这些结果。我自己进行了几次测试,我什至得到了一个只有符号的密码。

更新

设置最大特殊字符不是开箱即用的。

有几个选项可以推出自己的:

  1. 从 生成的密码开始,在MemberShip.GeneratePassword密码字符串中搜索特殊符号 ( !char.IsLetterOrDigit(c)),当您到达柜台时,将其替换为随机字母或数字。

  2. 从头开始并创建您自己的密码生成器。

  3. ...
于 2013-09-23T09:46:54.510 回答