ランダムなパスワードを生成するクラスです。
Imports System.Text
''' <summary>
''' ランダムパスワード生成クラス
''' </summary>
Class PasswordCreator
'パスワードに使用する文字
Private _passwordChars As StringBuilder
Private _lengthMin As Integer = 6
''' <summary>
''' パスワードの最小文字数
''' </summary>
Public Property LengthMin() As Integer
Get
Return _lengthMin
End Get
Set(ByVal value As Integer)
_lengthMin = value
End Set
End Property
Private _lengthMax As Integer = 6
''' <summary>
''' パスワードの最大文字数
''' </summary>
Public Property LengthMax() As Integer
Get
Return _lengthMax
End Get
Set(ByVal value As Integer)
_lengthMax = value
End Set
End Property
Private _use数字 As Boolean = True
''' <summary>
''' 数字を使用するか
''' </summary>
Public Property Use数字() As Boolean
Get
Return _use数字
End Get
Set(ByVal value As Boolean)
_use数字 = value
End Set
End Property
Private _use小文字 As Boolean = True
''' <summary>
''' 小文字を使用するか
''' </summary>
Public Property Use小文字() As Boolean
Get
Return _use小文字
End Get
Set(ByVal value As Boolean)
_use小文字 = value
End Set
End Property
Private _use大文字 As Boolean = True
''' <summary>
''' 大文字を使用するか
''' </summary>
Public Property Use大文字() As Boolean
Get
Return _use大文字
End Get
Set(ByVal value As Boolean)
_use大文字 = value
End Set
End Property
Private _use記号 As Boolean = False
''' <summary>
''' 記号を使用するか
''' </summary>
Public Property Use記号() As Boolean
Get
Return _use記号
End Get
Set(ByVal value As Boolean)
_use記号 = value
End Set
End Property
''' <summary>
''' コンストラクタ
''' </summary>
Public Sub New()
End Sub
''' <summary>
''' パスワードに使用する文字種をリフレッシュする
''' </summary>
Private Sub _refreshUseChars()
_passwordChars = New StringBuilder()
'数字
If _use数字 Then
_passwordChars.Append("0123456789")
End If
'小文字
If _use小文字 Then
_passwordChars.Append("abcdefghijklmnopqrstuvwxyz")
End If
'大文字
If _use大文字 Then
_passwordChars.Append("abcdefghijklmnopqrstuvwxyz".ToUpper())
End If
'記号
If _use記号 Then
_passwordChars.Append("#$-=?@[]_")
End If
If _passwordChars.Length = 0 Then
Throw New ApplicationException("文字種が1つも選ばれていません。")
End If
End Sub
''' <summary>
''' ランダムなパスワードを生成する
''' </summary>
''' <returns></returns>
Public Function CreatePassword() As String
'文字数を決定する
Dim r As New Random()
Dim len As Integer = r.[Next](_lengthMin, _lengthMax + 1)
Return _createPassword(len)
End Function
''' <summary>
''' ランダムなパスワードを生成する
''' </summary>
''' <param name="length">生成する文字列の長さ</param>
''' <returns>生成された文字列</returns>
Private Function _createPassword(ByVal length As Integer) As String
'文字種設定
_refreshUseChars()
Dim sb As New System.Text.StringBuilder(length)
Dim r As New Random()
For i As Integer = 0 To length - 1
'文字の位置をランダムに選択
Dim pos As Integer = r.[Next](_passwordChars.ToString().Length)
'選択された位置の文字を取得
Dim c As Char = _passwordChars.ToString()(pos)
'パスワードに追加
sb.Append(c)
Next
Return sb.ToString()
End Function
End Class