// ................................................................................................. public string Generate(int pLength, PasswordGeneratorOptionsEx pOptions) { if (pLength < PasswordMinLength) { pLength = PasswordMinLength; } Password password = new Password(); while (password.PasswordLength < pLength) { PasswordChunk chunk = GenerateNextChunk(password); password.AppendChunk(chunk); } bool capitalsRandom = false; if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Capitals)) { if (pOptions.Options.HasFlag(PasswordGeneratorOptions.CapitalsFirstInChunks) || pOptions.Options.HasFlag(PasswordGeneratorOptions.CapitalsLastInChunks)) { CapitalizeChunks(password, pOptions.Options); } else { capitalsRandom = true; } } if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Specials)) { InsertSpecialChunk(password, pOptions.SpecialGroupSymbols, !pOptions.Options.HasFlag(PasswordGeneratorOptions.SpecialsNotBlank), pOptions.SpecialGroupsMin, pOptions.SpecialGroupsMax); } if (capitalsRandom) { CapitalizeRandomPassword(password, pOptions.CapitalsMinimum, pOptions.CapitalsMaximum); } if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Separators)) { InsertSeparators(password, pOptions.Options.HasFlag(PasswordGeneratorOptions.SeparatorRotation), pOptions.FixedSeparatorChar); } LastPassword = password; return(password.Text); }