Ограничить количество цифр в генераторе паролей
Добрый день всем!
Есть отличная функция - генератор паролей, со всеми необходимыми настойками.
Описание от автора (ник iRon) :
PHP код:
Параметр Size определяет длину пароля.
Параметр CharSets определяет сложность , в которой символ U , L, N и S обозначает Прописные, Строчные буквы, Цифры и Символы. Если указано в нижнем регистре ( u , l , n или s ) , возвращаемая строка может содержать любой символ в соответствующем наборе символов, если он указан в верхнем регистре ( U , L , N или S), возвращаемая строка будет содержать по крайней мере один из символов в соответствующем наборе символов.
Параметр Exclude позволяет исключить определенные символы, которые могут, например , привести к путанице, например, буквенно-цифровой O и числовой 0 (ноль).
Примеры:
Чтобы создать пароль длиной 8 символов, который может содержать любые прописные, строчные и цифры:
Create-Password 8 uln
Чтобы создать пароль длиной 12 символов, который содержит по крайней мере один символ верхнего регистра, один символ нижнего регистра, одно число и один символ и не содержит символов OLIoli01:
Create-Password 12 ULNS "OLIoli01"
Функция:
Код:
Function MakeUp-String([Int]$Size = 8, [Char[]]$CharSets = "ULNS", [Char[]]$Exclude) {
$Chars = @(); $TokenSet = @()
If (!$TokenSets) {$Global:TokenSets = @{
U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Upper case
L = [Char[]]'abcdefghijklmnopqrstuvwxyz' #Lower case
N = [Char[]]'0123456789' #Numerals
S = [Char[]]'!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~' #Symbols
}}
$CharSets | ForEach {
$Tokens = $TokenSets."$_" | ForEach {If ($Exclude -cNotContains $_) {$_}}
If ($Tokens) {
$TokensSet += $Tokens
If ($_ -cle [Char]"Z") {$Chars += $Tokens | Get-Random} #Character sets defined in upper case are mandatory
}
}
While ($Chars.Count -lt $Size) {$Chars += $TokensSet | Get-Random}
($Chars | Sort-Object {Get-Random}) -Join "" #Mix the (mandatory) characters and output string
}; Set-Alias Create-Password MakeUp-String -Description "Generate a random string (password)"
Всё устраивает отлично. Но хотелось бы как-то ограничить количество цифр в пароле. А ещё лучше установить их минимальное и максимальное количество.
Может кто подскажет, как правильно это прописать, в самой функции или при её вызове ?
Заранее благодарен за советы и подсказки!
|