2013-09-22 2 views
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 символа флажков. Может ли кто-нибудь помочь мне диагностировать эту проблему и/или улучшить мой код? Благодарю.

+1

ли ypou установить точки останова INT 'btn_Generate_Click', чтобы увидеть, если значение' symbols' правильно? – Koen

+2

[Согласно MSDN] (http://msdn.microsoft.com/en-us/library/system.web.security.membership.generatepassword.aspx) второй параметр указывает только * минимальное количество символов. Вы ожидаете, что он наложит * максимум * вместо этого? –

+0

@RogerRowland Действительно, я был, любая идея, как это сделать? – SCGB

ответ

1

От MSDN

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

numberOfNonAlphanumericCharactersType: минимальное число не буквенно-цифровых символов (например, @, #,,%, &, и так далее!) В сгенерированный пароль.

Это объясняет, почему вы получили эти результаты. Я проверил тест несколько раз сам, и у меня даже были пароли с только символами.

UPDATE

Установка максимум специальных символов не вне коробки доступны.

Есть несколько вариантов, чтобы выкатить свой собственный:

  1. Пуска от пароля, генерируемого MemberShip.GeneratePassword, поиска пароля-строки для специальных символов (!char.IsLetterOrDigit(c)) и когда вы достигли счетчик замените его случайной буквой или цифрой.

  2. Начните с нуля и создайте свой собственный генератор паролей.

  3. ...
+0

Ах, так и было, вот что я получаю для позднего программирования. Любая идея, как наложить максимальное количество символов? – SCGB

+1

Обновлен мой ответ. К сожалению, в инфраструктуре .Net (afaik) нет ничего доступного из коробки. И я полностью понимаю, что происходит с поздним программированием. ;-) – Koen

Смежные вопросы