2013-09-22 30 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