パスワード生成クラス

一括して多数のパスワードを生成する用途で作成しました。
個人用には「シンプルなパスワード管理ツール」があります。 このページのサンプルは一括して多数のパスワードを生成する用途を想定しています。
生成ロジック自体は「シンプルなパスワード管理ツール」で使用しているものに近いものでかなり前から確立しているものですが、 最近になって一括生成の問合せが増えてきました。 企業内で全社員が利用するクラウドサービスを採用するにあたって、事前に全社員のアカウントを登録する時に利用する「パスワード」を生成するのが目的です。

「使い回しでない」「類推されない」「複雑な文字列」という前提で乱数を利用して生成するものです。

生成したパスワードを使って利用するクラウドサービスにアカウントを一括作成した後は、全社員にその「パスワード」を通知する必要がありますが、 これについてはおそらく「メール送信(CDO利用)」などを利用したプログラムを用意するのだと思いますが、 ここでは目的が違うので触れていません。
テスト用サンプルとともにワークブックを作成しています。

パスワード生成クラス
(画像をクリックすると、このサンプルがダウンロードできます)

このサンプルをダウンロードして開くと、最初は見出しだけのワークシートの状態で開きます。
起動ボタン等は用意していないのでマクロの実行から「CreatePasswordsTEST」を実行していただくと、このように100件のパスワードが生成されます。 英小文字、英大文字、数字、記号の文字種別の発生文字数が右に表示されるようになっています。

下記のモジュール(Module1)のところを見ていただくと判りますが、 「パスワード生成クラス(clsMakePassword)」のプロパティの設定記述は「パスワード生成クラスのパラメータ」としてコメントアウトしており、 開いたままだと全てデフォルトで生成動作が行なわれています。
このコメントアウトを解除しても記述のままだとデフォルトと変わらないのですが、パスワード桁数などを変更したい場合はコメントアウトを解除してから必要なプロパティ値を変更して下さい。
記号文字種、パスワード桁数、各文字種の使用有無、同一文字の発生上限文字数、記号の発生上限文字数が指定できます。

下記で説明するプロパティで設定できる項目以外にロジック上で制限しているものは以下の通りです。
制限事項
パスワードの文字種として英小文字の「l(エル)」と英大文字「O(オー)」は除外しています。
英小文字、英大文字、数字、記号の文字種で指定がある文字種が最低1文字含まれているかで制限しています。
英小文字、英大文字、数字が全て指定されている時はそれぞれが全体のパスワード桁数の半分の桁数以上にならないように制限しています。
先頭に記号が発生しないように制限しています。
記号が連続しないように制限しています。
同一文字が連続しないように制限しています。
記号については同一文字が複数回発生しないように制限しています。

プロシージャ、プロパティの説明です。
「パスワード生成クラス(clsMakePassword)」の公開プロシージャです。
プロシージャ タイトル 機能内容
MakePassword パスワード生成 1件のパスワードを生成します。
戻り値:生成したパスワード(String)
引数①:生成で使用した英小文字文字数(Long,Ref参照,Option)
引数②:生成で使用した英小文字文字数(Long,Ref参照,Option)
引数③:生成で使用した数字文字数(Long,Ref参照,Option)
引数④:生成で使用した記号文字数(Long,Ref参照,Option)
引数は検証用に設定しているものです。検証後の本稼働では必要ありません。

「パスワード生成クラス(clsMakePassword)」のプロパティです。
全て設定を設定するためのもので受け取りプロパティはありません。
プロパティ タイトル 機能内容
prpSymbolChars 記号文字種(String) デフォルト:#$-=?@[]_
パスワードに記号を使用する時の使用できる文字種が指定できます。
ブランクとして設定した場合は「記号使用(prpUseSymbol)」がFalseになります。
prpPWLength パスワード桁数(Long) デフォルト:20
生成するパスワードの桁数が指定できます。
prpUseAlfaSmall 英小文字使用(Boolean) デフォルト:True
パスワードに英小文字を使用するかを指定できます。
prpUseAlfaLarge 英大文字使用(Boolean) デフォルト:True
パスワードに英大文字を使用するかを指定できます。
prpUseNumber 数字使用(Boolean) デフォルト:True
パスワードに数字を使用するかを指定できます。
prpUseSymbol 記号使用(Boolean) デフォルト:True
「記号文字種(prpSymbolChars)」がブランクの状態で本項目をTrueにした場合、 「記号文字種(prpSymbolChars)」はデフォルト値に戻ります。
prpCntMaxDupChar 同一文字生成上限件数(Long) デフォルト:2
英小文字、英大文字、数字について生成するパスワード内で同一文字が発生できる上限の文字数を指定できます。 記号については同一文字が発生できる上限は1文字のみに固定されています。
prpCntMaxSymbol 記号生成上限件数(Long) デフォルト:2
パスワードに使用する記号の生成文字数の上限を指定できます。
※プロパティ値の矛盾に関する内部チェックは行なっていません。

それではソースコードです。
まずは、テストで作成したモジュール(Module1)です。クラスの呼び出し方を確認して下さい。

'***************************************************************************************************
'   パスワード生成テスト
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'19/01/30(1.00)新規作成
'19/02/02(1.00)生成行列を定数化
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "パスワード生成テスト"
'---------------------------------------------------------------------------------------------------
Private Const g_cnsRowStr As Long = 3                           ' 先頭行
Private Const g_cnsRowEnd As Long = 102                         ' 最終行
Private Const g_cnsColPW As Long = 1                            ' PW列
' ↓↓↓ これは処理結果検証用の記述です ↓↓↓
Private Const g_cnsColAlfaSmall As Long = 2                     ' 英小文字文字数列
Private Const g_cnsColAlfaLarge As Long = 3                     ' 英大文字文字数列
Private Const g_cnsColNumber As Long = 4                        ' 数字文字数列
Private Const g_cnsColSymbol As Long = 5                        ' 記号文字数列
' ↑↑↑ これは処理結果検証用の記述です ↑↑↑

'***************************************************************************************************
'* 処理名 :CreatePasswordsTEST
'* 機能  :パスワード生成テスト
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年01月30日
'* 作成者 :井上 治
'* 更新日 :2019年02月02日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub CreatePasswordsTEST()
    '-----------------------------------------------------------------------------------------------
    Dim objMakePassword As New clsMakePassword                      ' パスワード生成クラス
    Dim objSh As Worksheet                                          ' Worksheet
    Dim lngCntAlfaSmall As Long                                     ' 英小文字文字数
    Dim lngCntAlfaLarge As Long                                     ' 英大文字文字数
    Dim lngCntNumber As Long                                        ' 数字文字数
    Dim lngCntSymbol As Long                                        ' 記号文字数
    Dim lngRow As Long                                              ' 行INDEX
    Set objSh = ThisWorkbook.Worksheets(1)
    With objSh
        ' 既に生成済か
        If .Cells(g_cnsRowStr, g_cnsColPW).Value <> "" Then
            ' 処理不要なら終了
            If MsgBox("このシートは既にパスワード生成済です。" & vbCrLf & "再度生成しますか?", _
                      vbInformation + vbYesNo, g_cnsTitle) <> vbYes Then Exit Sub
        End If
        ' フィルタ解除
        If .FilterMode Then .ShowAllData
'        ' パスワード生成クラスのパラメータ(変更可、このデフォルト通りなら記述不要)
'        With objMakePassword
'            .prpSymbolChars = "#$-=?@[]_"           ' 記号文字種
'            .prpPWLength = 20                       ' パスワード文字数
'            .prpUseAlfaSmall = True                 ' 英小文字使用
'            .prpUseAlfaLarge = True                 ' 英大文字使用
'            .prpUseNumber = True                    ' 数字使用
'            .prpUseSymbol = True                    ' 記号使用
'            .prpCntMaxDupChar = 2                   ' 同一文字生成上限件数
'            .prpCntMaxSymbol = 2                    ' 記号生成上限件数
'        End With
        ' パスワード消去
        Call ErasePasswordsTEST
        ' 連続生成する
        For lngRow = g_cnsRowStr To g_cnsRowEnd
            ' パスワード生成(PW生成のみなら引数は不要)
            .Cells(lngRow, g_cnsColPW).Value = objMakePassword.MakePassword(lngCntAlfaSmall, _
                                                                            lngCntAlfaLarge, _
                                                                            lngCntNumber, _
                                                                            lngCntSymbol)
            ' ↓↓↓ これは処理結果検証用の記述です ↓↓↓
            .Cells(lngRow, g_cnsColAlfaSmall).Value = lngCntAlfaSmall
            .Cells(lngRow, g_cnsColAlfaLarge).Value = lngCntAlfaLarge
            .Cells(lngRow, g_cnsColNumber).Value = lngCntNumber
            .Cells(lngRow, g_cnsColSymbol).Value = lngCntSymbol
            ' ↑↑↑ これは処理結果検証用の記述です ↑↑↑
        Next lngRow
    End With
    ThisWorkbook.Saved = True
End Sub

'***************************************************************************************************
'* 処理名 :ErasePasswordsTEST
'* 機能  :パスワード消去テスト
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年01月30日
'* 作成者 :井上 治
'* 更新日 :2019年02月02日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub ErasePasswordsTEST()
    '-----------------------------------------------------------------------------------------------
    Dim objSh As Worksheet                                          ' Worksheet
    Dim lngRow As Long                                              ' 行INDEX
    Set objSh = ThisWorkbook.Worksheets(1)
    With objSh
        ' フィルタ解除
        If .FilterMode Then .ShowAllData
        ' 最終行判定
        lngRow = .Cells(.Rows.Count, g_cnsColPW).End(xlUp).Row
        ' パスワード生成済か
        If lngRow >= g_cnsRowStr Then
            ' パスワード列をクリア
            .Range(.Cells(g_cnsRowStr, g_cnsColPW), .Cells(lngRow, g_cnsColPW)).ClearContents
            ' ↓↓↓ これは処理結果検証用の記述です ↓↓↓
            .Range(.Cells(g_cnsRowStr, g_cnsColAlfaSmall), .Cells(lngRow, g_cnsColAlfaSmall)).ClearContents
            .Range(.Cells(g_cnsRowStr, g_cnsColAlfaLarge), .Cells(lngRow, g_cnsColAlfaLarge)).ClearContents
            .Range(.Cells(g_cnsRowStr, g_cnsColNumber), .Cells(lngRow, g_cnsColNumber)).ClearContents
            .Range(.Cells(g_cnsRowStr, g_cnsColSymbol), .Cells(lngRow, g_cnsColSymbol)).ClearContents
            ' ↑↑↑ これは処理結果検証用の記述です ↑↑↑
        End If
    End With
    ThisWorkbook.Saved = True
End Sub

'----------------------------------------<< End of Source >>----------------------------------------

次が「パスワード生成クラス(clsMakePassword)」本体です。

'***************************************************************************************************
'   パスワード生成クラス(clsMakePassword)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'16/06/30(1.00)新規作成
'18/12/21(1.10)動作改善、クラス化移行
'19/01/30(1.20)同一文字生成上限件数、記号文字種、記号生成上限件数の設定を追加
'***************************************************************************************************
Option Explicit
'===================================================================================================
' 共通定数
'---------------------------------------------------------------------------------------------------
' パスワード使用文字種(英小文字の「l」、英大文字の「O」は除外している) ※ここでは記号は含まない
Private Const g_cnsPasswordChars As String = _
    "abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ0123456789"
'    ....*....1....*....2....*....3....*....4....*....5....*....6
Private Const g_cnsDefaultSymbolChars As String = "#$-=?@[]_"   ' 記号文字種(デフォルト)
Private Const g_cnsAlfaSmallS As Long = 1                       ' 英小文字開始位置
Private Const g_cnsAlfaSmallE As Long = 25                      ' 英小文字終了位置
Private Const g_cnsAlfaLargeS As Long = 26                      ' 英大文字開始位置
Private Const g_cnsAlfaLargeE As Long = 50                      ' 英大文字終了位置
Private Const g_cnsNumberS As Long = 51                         ' 数字開始位置
Private Const g_cnsNumberE As Long = 60                         ' 数字終了位置
Private Const g_cnsSymbolS As Long = 61                         ' 記号開始位置
'===================================================================================================
' 設定項目
'---------------------------------------------------------------------------------------------------
Private g_strPasswordChars As String                            ' パスワード使用文字種
Private g_lngPasswordCharsLength As Long                        ' パスワード使用文字種の長さ
'---------------------------------------------------------------------------------------------------
' プロパティ設定項目
Private g_strSymbolChars As String                              ' 記号文字種
Private g_lngPWLength As Long                                   ' パスワード桁数
Private g_blnUseAlfaSmall As Boolean                            ' 英小文字使用
Private g_blnUseAlfaLarge As Boolean                            ' 英大文字使用
Private g_blnUseNumber As Boolean                               ' 数字使用
Private g_blnUseSymbol As Boolean                               ' 記号使用
Private g_lngCntMaxDupChar As Long                              ' 同一文字生成上限件数
Private g_lngCntMaxSymbol As Long                               ' 記号生成上限件数

'***************************************************************************************************
'   ■■■ 初期化 ■■■
'***************************************************************************************************
'* 処理名 :Class_Initialize
'* 機能  :クラス初期化(既定)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2016年06月30日
'* 作成者 :井上 治
'* 更新日 :2019年01月30日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Class_Initialize()
    '-----------------------------------------------------------------------------------------------
    ' 設定項目に既定値をセット
    g_strSymbolChars = g_cnsDefaultSymbolChars
    g_lngPWLength = 20
    g_blnUseAlfaSmall = True
    g_blnUseAlfaLarge = True
    g_blnUseNumber = True
    g_blnUseSymbol = True
    g_lngCntMaxDupChar = 2
    g_lngCntMaxSymbol = 2
    ' パスワード使用文字種の再設定
    Call GP_ResetPasswordChars
    ' 乱数初期化
    Randomize
End Sub

'***************************************************************************************************
'   ■■■ 公開プロシージャ ■■■
'***************************************************************************************************
'* 処理名 :MakePassword
'* 機能  :パスワード生成
'---------------------------------------------------------------------------------------------------
'* 返り値 :生成したパスワード(String)
'* 引数  :Arg1 = 英小文字文字数(Long)                        ※Ref参照、Option
'*      Arg2 = 英大文字文字数(Long)                        ※Ref参照、Option
'*      Arg3 = 数字文字数(Long)                            ※Ref参照、Option
'*      Arg4 = 記号文字数(Long)                            ※Ref参照、Option
'---------------------------------------------------------------------------------------------------
'* 作成日 :2016年06月30日
'* 作成者 :井上 治
'* 更新日 :2019年01月30日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Friend Function MakePassword(Optional ByRef lngCntAlfaSmall As Long = 0, _
                             Optional ByRef lngCntAlfaLarge As Long = 0, _
                             Optional ByRef lngCntNumber As Long = 0, _
                             Optional ByRef lngCntSymbol As Long = 0) As String
    '-----------------------------------------------------------------------------------------------
    Dim blnFinish As Boolean                                        ' 終了判定
    Dim lngKetasu As Long                                           ' 桁数WORK
    Dim lngIx As Long                                               ' テーブルINDEX
    Dim strPassword As String                                       ' パスワード
    Dim tblCntChar() As Long                                        ' 文字発生件数テーブル
    ' 生成成功まで繰り返す
    Do Until blnFinish
        ' 変数クリア
        strPassword = ""
        lngCntAlfaSmall = 0
        lngCntAlfaLarge = 0
        lngCntNumber = 0
        lngCntSymbol = 0
        ReDim tblCntChar(1 To g_lngPasswordCharsLength)
        ' 生成文字数まで繰り返す
        Do While Len(strPassword) < g_lngPWLength
            ' パスワード生成(1文字分処理)
            Call GP_MakePWChar(strPassword, _
                               lngCntAlfaSmall, _
                               lngCntAlfaLarge, _
                               lngCntNumber, _
                               lngCntSymbol, _
                               tblCntChar)
        Loop
        ' 終了判定(使用文字種が少なくとも1文字以上あるか)
        blnFinish = True
        ' 英小文字
        If g_blnUseAlfaSmall And lngCntAlfaSmall = 0 Then blnFinish = False
        ' 英大文字
        If g_blnUseAlfaLarge And lngCntAlfaLarge = 0 Then blnFinish = False
        ' 数字
        If g_blnUseNumber And lngCntNumber = 0 Then blnFinish = False
        ' 記号
        If g_blnUseSymbol And lngCntSymbol = 0 Then blnFinish = False
        ' 英小文字,英大文字,数字が指定の時各文字種の件数チェック
        If blnFinish And g_blnUseAlfaSmall And g_blnUseAlfaLarge And g_blnUseNumber Then
            lngKetasu = g_lngPWLength \ 2
            ' 英小文字が桁数の半分以上はNG
            If lngCntAlfaSmall >= lngKetasu Then blnFinish = False
            ' 英大文字が桁数の半分以上はNG
            If lngCntAlfaLarge >= lngKetasu Then blnFinish = False
            ' 数字が桁数の半分以上はNG
            If lngCntNumber >= lngKetasu Then blnFinish = False
            ' 16桁以上の時
            If g_lngPWLength >= 16 Then
                ' 英小文字が2桁はNG
                If lngCntAlfaSmall <= 2 Then blnFinish = False
                ' 英大文字が2桁はNG
                If lngCntAlfaLarge <= 2 Then blnFinish = False
                ' 数字が2桁はNG
                If lngCntNumber <= 2 Then blnFinish = False
            ElseIf g_lngPWLength >= 10 Then
                ' 10桁以上の時
                ' 英小文字が1桁はNG
                If lngCntAlfaSmall <= 1 Then blnFinish = False
                ' 英大文字が1桁はNG
                If lngCntAlfaLarge <= 1 Then blnFinish = False
                ' 数字が1桁はNG
                If lngCntNumber <= 1 Then blnFinish = False
            End If
            ' 記号
            If blnFinish And g_blnUseSymbol Then
                ' 記号が上限件数超はNG
                If lngCntSymbol > g_lngCntMaxSymbol Then blnFinish = False
            End If
        End If
        ' 同一文字出現回数
        If blnFinish Then
            ' 各文字の出現回数を判定(記号以外)
            For lngIx = 1 To g_cnsNumberE
                ' 出現回数超過か
                If tblCntChar(lngIx) > g_lngCntMaxDupChar Then
                    blnFinish = False
                    Exit For
                End If
            Next lngIx
            ' 終了判定
            If blnFinish And g_blnUseSymbol Then
                lngIx = g_cnsSymbolS
                ' 記号の出現回数
                Do While lngIx <= g_lngPasswordCharsLength
                    ' 同一記号は1回まで
                    If tblCntChar(lngIx) > 1 Then
                        blnFinish = False
                        Exit Do
                    End If
                    ' 次へ
                    lngIx = lngIx + 1
                Loop
            End If
        End If
    Loop
    MakePassword = strPassword
End Function

'***************************************************************************************************
'   ■■■ サブ処理 ■■■
'***************************************************************************************************
'* 処理名 :GP_MakePWChar
'* 機能  :パスワード生成(1文字分処理)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 生成したパスワード(String)              ※Ref参照
'*      Arg2 = 英小文字文字数(Long)                    ※Ref参照
'*      Arg3 = 英大文字文字数(Long)                    ※Ref参照
'*      Arg4 = 数字文字数(Long)                        ※Ref参照
'*      Arg5 = 記号文字数(Long)                        ※Ref参照
'*      Arg6 = 文字発生件数テーブル(Array:Long)        ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2016年06月30日
'* 作成者 :井上 治
'* 更新日 :2019年01月30日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub GP_MakePWChar(ByRef strPassword As String, _
                          ByRef lngCntAlfaSmall As Long, _
                          ByRef lngCntAlfaLarge As Long, _
                          ByRef lngCntNumber As Long, _
                          ByRef lngCntSymbol As Long, _
                          ByRef tblCntChar() As Long)
    '-----------------------------------------------------------------------------------------------
    Dim lngPos As Long                                              ' 文字位置(乱数取り出し)
    Static lngPosP As Long                                          ' 前回文字位置
    ' 乱数の発生
    lngPos = Int(g_lngPasswordCharsLength * Rnd + 1)
    ' 先頭記号はNG
    If strPassword = "" And lngPos >= g_cnsSymbolS Then Exit Sub
    ' 記号の連続はNG
    If lngPos >= g_cnsSymbolS And lngPosP >= g_cnsSymbolS Then Exit Sub
    ' 同一文字連続はNG
    If lngPos = lngPosP Then Exit Sub
    ' 文字位置を退避
    lngPosP = lngPos
    ' 文字種判定
    Select Case lngPos
        Case Is <= g_cnsAlfaSmallE
            ' 英小文字
            If g_blnUseAlfaSmall Then
                lngCntAlfaSmall = lngCntAlfaSmall + 1
                strPassword = strPassword & Mid(g_strPasswordChars, lngPos, 1)
                tblCntChar(lngPos) = tblCntChar(lngPos) + 1
            End If
        Case g_cnsAlfaLargeS To g_cnsAlfaLargeE
            ' 英大文字
            If g_blnUseAlfaLarge Then
                lngCntAlfaLarge = lngCntAlfaLarge + 1
                strPassword = strPassword & Mid(g_strPasswordChars, lngPos, 1)
                tblCntChar(lngPos) = tblCntChar(lngPos) + 1
            End If
        Case g_cnsNumberS To g_cnsNumberE
            ' 数字
            If g_blnUseNumber Then
                lngCntNumber = lngCntNumber + 1
                strPassword = strPassword & Mid(g_strPasswordChars, lngPos, 1)
                tblCntChar(lngPos) = tblCntChar(lngPos) + 1
            End If
        Case Else
            ' 記号
            If g_blnUseSymbol Then
                lngCntSymbol = lngCntSymbol + 1
                strPassword = strPassword & Mid(g_strPasswordChars, lngPos, 1)
                tblCntChar(lngPos) = tblCntChar(lngPos) + 1
            End If
    End Select
End Sub

'***************************************************************************************************
'* 処理名 :GP_ResetPasswordChars
'* 機能  :パスワード使用文字種の再設定
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年01月30日
'* 作成者 :井上 治
'* 更新日 :2019年01月30日
'* 更新者 :井上 治
'* 機能説明:英数字文字列に指定の記号を追加して桁数を再設定
'* 注意事項:
'***************************************************************************************************
Private Sub GP_ResetPasswordChars()
    '-----------------------------------------------------------------------------------------------
    g_strPasswordChars = g_cnsPasswordChars & g_strSymbolChars
    g_lngPasswordCharsLength = Len(g_strPasswordChars)
    ' 記号無しの場合
    If g_strSymbolChars = "" Then
        g_blnUseSymbol = False
    End If
End Sub

'***************************************************************************************************
'   ■■■ プロパティ ■■■
'***************************************************************************************************
' 記号文字種(String)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpSymbolChars(ByVal Value As String)
    g_strSymbolChars = Value
    ' パスワード使用文字種の再設定
    Call GP_ResetPasswordChars
End Property

'===================================================================================================
' パスワード桁数(Long)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpPWLength(ByVal Value As Long)
    g_lngPWLength = Value
End Property

'===================================================================================================
' 英小文字使用(Boolean)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpUseAlfaSmall(ByVal Value As Boolean)
    g_blnUseAlfaSmall = Value
End Property

'===================================================================================================
' 英大文字使用(Boolean)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpUseAlfaLarge(ByVal Value As Boolean)
    g_blnUseAlfaLarge = Value
End Property

'===================================================================================================
' 数字使用(Boolean)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpUseNumber(ByVal Value As Boolean)
    g_blnUseNumber = Value
End Property

'===================================================================================================
' 記号使用(Boolean)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpUseSymbol(ByVal Value As Boolean)
    g_blnUseSymbol = Value
    ' 記号有りの場合
    If g_blnUseSymbol And g_strSymbolChars = "" Then
        g_strSymbolChars = g_cnsDefaultSymbolChars
        ' パスワード使用文字種の再設定
        Call GP_ResetPasswordChars
    End If
End Property

'===================================================================================================
' 同一文字生成上限件数(Long)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpCntMaxDupChar(ByVal Value As Long)
    g_lngCntMaxDupChar = Value
End Property

'===================================================================================================
' 記号生成上限件数(Long)
'---------------------------------------------------------------------------------------------------
Friend Property Let prpCntMaxSymbol(ByVal Value As Long)
    g_lngCntMaxSymbol = Value
End Property

'----------------------------------------<< End of Source >>----------------------------------------

//-->