在我的組織中,用戶必須只使用數字生成密碼(使用鍵盤訪問),最小長度爲8個數字。我怎樣才能確保密碼的用戶generats是不是太弱(使用服務器C#procossing密碼更改請求),應用下列規則:僅限數字密碼
- 3以下電話號碼(密碼即使是一部分)是不連續的或重複(945 8401或543 784)
在我的組織中,用戶必須只使用數字生成密碼(使用鍵盤訪問),最小長度爲8個數字。我怎樣才能確保密碼的用戶generats是不是太弱(使用服務器C#procossing密碼更改請求),應用下列規則:僅限數字密碼
正則表達式是:
^((?!(?<ch>.)\k<ch>\k<ch>)(?!012|123|234|345|456|567|678|789|890)[0-9]){8,}$
的(?!(?<ch>.)\k<ch>\k<ch>)
將重複檢查三次相同的字符。請注意,對於不同的連續序列,我必須將它們放入可能序列的列表中,(?!012|123|234|345|456|567|678|789|890)
。 [0-9]
是將被接受爲有效的字符。 {8,}
是最小長度。
對創造力感到滿意。 – CodeCaster
不錯,謝謝! –
如果你想有一個通用的方法,它告訴你的反覆,上升和下降的位數:
static void checkStrength(string text, out int maxRepeats, out int maxAscending, out int maxDescending)
{
maxRepeats = 0;
maxAscending = 0;
maxDescending = 0;
int currRepeats = 0;
int currAscending = 0;
int currDescending = 0;
for (int i = 1; i < text.Length; ++i)
{
char curr = text[i];
char prev = text[i-1];
if (curr - prev == -1)
maxDescending = Math.Max(maxDescending, ++currDescending);
else
currDescending = 1;
if (curr - prev == 1)
maxAscending = Math.Max(maxAscending, ++currAscending);
else
currAscending = 1;
if (curr == prev)
maxRepeats = Math.Max(maxRepeats, ++currRepeats);
else
currRepeats = 1;
}
}
你將不得不調用這個,然後做你想要的結果是什麼:
int maxRepeats, maxAscending, maxDescending;
checkStrength(text, out maxRepeats, out maxAscending, out maxDescending);
if (maxRepeats > REPEAT_LIMIT || maxAscending > ASCENDING_LIMIT || maxDescending > DESCENDING_LIMIT)
{
// ... report error or whatever
}
如果您不需要改變允許的重複或升序數字的數量,那麼xanatos的正則表達式顯然是最短的代碼。只有在運行時需要更改允許的計數時,才需要此代碼。
任何企圖在你身邊? –
這真的是一個編程問題嗎?似乎這與編寫實際程序無關。 –
@ roryap:對我來說,這似乎是一個完全合理的問題:給定一個候選密碼,它是否違反序列/重複規則?缺乏努力是另一回事,但這絕對是一個編程問題。 –