ランダムなパスワードを作成するクラス

カテゴリ: VB.NET
投稿日時:2011/03/09 15:27:25
ランダムなパスワードを生成するクラスです。

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
このエントリーをはてなブックマークに追加

スポンサード リンク