2013-09-22 101 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/zh-cn/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

設置最大的特殊字符是不是超出現成可用。

有幾個選項來推出自己的:從MemberShip.GeneratePassword生成的密碼

  1. 開始, 搜索密碼字符串特殊符號 (!char.IsLetterOrDigit(c)),當你已經達到了計數器 用隨機字母或數字替換它。

  2. 從頭開始創建自己的密碼生成器。

  3. ...
+0

啊,所以就是這樣,這就是我得到的深夜編程。任何想法如何施加最大數量的符號? – SCGB

+1

更新了我的答案。很遺憾,在.Net框架(afaik)中沒有任何東西可用。我完全理解深夜編程的事情。 ;-) – Koen