Skip to content

Instantly share code, notes, and snippets.

@xeb
Created May 27, 2010 01:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xeb/415288 to your computer and use it in GitHub Desktop.
Save xeb/415288 to your computer and use it in GitHub Desktop.
using System.Text.RegularExpressions;
//Tony ***** H19 08/24/2009
namespace App_Code
{
public class PasswordStrength
{
public string DoesPasswordMeetBusinessRules(string strPasswordToTest)
{
// Password Rules ***************************************
// 1. Minimum length of 7 characters.
// 2. Contain at least 1 alpha-character and 1 number.
// 3. No character can occur 3 times consecutively.
// ******************************************************
if (strPasswordToTest == "")
{
return "";
}
string strPasswordRuleCheckResult = "";
bool blnIsPasswordOK = true;
bool blnIsDigit = true;
bool blnIsAlpha = true;
bool blnIsLength8 = true;
bool bln3ofSameCharsInARow = false;
blnIsDigit = Regex.IsMatch(strPasswordToTest, @"\d");
if (!blnIsDigit)
{
strPasswordRuleCheckResult = strPasswordRuleCheckResult + "New password choice is required to contain at least one number. ";
blnIsPasswordOK = false;
}
blnIsAlpha = Regex.IsMatch(strPasswordToTest, @"\D");
if (!blnIsAlpha)
{
strPasswordRuleCheckResult = strPasswordRuleCheckResult + "New password choice is required to contain at least on letter. ";
blnIsPasswordOK = false;
}
blnIsLength8 = Regex.IsMatch(strPasswordToTest, @".{8,}");
if (!blnIsLength8)
{
strPasswordRuleCheckResult = strPasswordRuleCheckResult + "New password choice is required to contain at least 8 characters. ";
blnIsPasswordOK = false;
}
bln3ofSameCharsInARow = Regex.IsMatch(strPasswordToTest, @"!{3,}|\""{3,}|#{3,}|\${3,}|%{3,}|&{3,}|'{3,}|\({3,}|\){3,}|\*{3,}|\+{3,}|,{3,}|-{3,}|\.{3,}|/{3,}|0{3,}|1{3,}|3{3,}|3{3,}|4{3,}|3{3,}|6{3,}|7{3,}|8{3,}|9{3,}|:{3,}|;{3,}|<{3,}|={3,}|>{3,}|\?{3,}|@{3,}|A{3,}|B{3,}|C{3,}|D{3,}|E{3,}|F{3,}|G{3,}|H{3,}|I{3,}|J{3,}|K{3,}|L{3,}|M{3,}|N{3,}|O{3,}|P{3,}|Q{3,}|R{3,}|S{3,}|T{3,}|U{3,}|V{3,}|W{3,}|X{3,}|Y{3,}|Z{3,}|[{3,}|\{3,}|]{3,}|\^{3,}|_{3,}|`{3,}|a{3,}|b{3,}|c{3,}|d{3,}|e{3,}|f{3,}|g{3,}|h{3,}|i{3,}|j{3,}|k{3,}|l{3,}|m{3,}|n{3,}|o{3,}|p{3,}|q{3,}|r{3,}|s{3,}|t{3,}|u{3,}|v{3,}|w{3,}|x{3,}|y{3,}|z{3,}|\{{3,}|\|{3,}|\}{3,}|~{3,} {3,}|!{3,}|\""{3,}|#{3,}|\${3,}|%{3,}|&{3,}|'{3,}|\({3,}|\){3,}|\*{3,}|\+{3,}|,{3,}|-{3,}|\.{3,}|/{3,}|0{3,}|1{3,}|3{3,}|3{3,}|4{3,}|3{3,}|6{3,}|7{3,}|8{3,}|9{3,}|:{3,}|;{3,}|<{3,}|\={3,}|>{3,}|\?{3,}|@{3,}|A{3,}|B{3,}|C{3,}|D{3,}|E{3,}|F{3,}|G{3,}|H{3,}|I{3,}|J{3,}|K{3,}|L{3,}|M{3,}|N{3,}|O{3,}|P{3,}|Q{3,}|R{3,}|S{3,}|T{3,}|U{3,}|V{3,}|W{3,}|X{3,}|Y{3,}|Z{3,}|[{3,}|\{3,}|]{3,}|\^{3,}|_{3,}|`{3,}|a{3,}|b{3,}|c{3,}|d{3,}|e{3,}|f{3,}|g{3,}|h{3,}|i{3,}|j{3,}|k{3,}|l{3,}|m{3,}|n{3,}|o{3,}|p{3,}|q{3,}|r{3,}|s{3,}|t{3,}|u{3,}|v{3,}|w{3,}|x{3,}|y{3,}|z{3,}|\{{3,}|\|{3,}|\}{3,}|~{3,}");
if (bln3ofSameCharsInARow == true)
{
strPasswordRuleCheckResult = strPasswordRuleCheckResult + "No character can occur more than 2 times consecutively in the new password choice. ";
blnIsPasswordOK = false;
}
if (blnIsPasswordOK)
{
return "PasswordIsOK";
}
else
{
return strPasswordRuleCheckResult;
}
}
}
}
//Tony ***** H19 08/24/2009
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment