Last active
February 1, 2018 05:27
-
-
Save gotoashishgupta/e5cb43af0701eeddd756f51d12dbdd57 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function _checkPasswordStrength (password = '') { | |
password = password.trim(); | |
const _passwordLength = password.length; | |
// Password Strength Additions | |
const _passwordLengthTest = _passwordLength >= 8 ? _passwordLength : 0; | |
const _numberOfCharactersTest = _passwordLength * 4; | |
let _strength = 0; | |
let _penalty = 0; | |
let _uppercaseLettersTest = 0; | |
let _lowercaseLettersTest = 0; | |
let _numbersTest = 0; | |
let _symbolsTest = 0; | |
let _middleNumbersOrSymbolsTest = 0; | |
let _requirementsTest = 0; | |
let _shortPasswordTest = 0; | |
let _lettersOnlyTest = 0; | |
let _numbersOnlyTest = 0; | |
let _repeatCharactersTest = 0; | |
let _consecutiveUppercaseLettersTest = 0; | |
let _consecutiveLowercaseLettersTest = 0; | |
let _consecutiveNumbersTest = 0; | |
_uppercaseLettersTest = password.match(/[A-Z]/g) || 0; | |
if(_uppercaseLettersTest !== 0) { | |
_uppercaseLettersTest = ( | |
_passwordLength - _uppercaseLettersTest.length | |
) * 2; | |
} | |
_lowercaseLettersTest = password.match(/[a-z]/g) || 0; | |
if(_lowercaseLettersTest !== 0) { | |
_lowercaseLettersTest = ( | |
_passwordLength - _lowercaseLettersTest.length | |
) * 2; | |
} | |
_numbersTest = password.match(/[0-9]/g) || 0; | |
if(_numbersTest !== 0) { | |
_numbersTest = _numbersTest.length * 4; | |
} | |
_symbolsTest = password.match(/[!-\/.:-@\[-`{-~]/g) || 0; | |
if(_symbolsTest !== 0) { | |
_symbolsTest = _symbolsTest.length * 6; | |
} | |
_middleNumbersOrSymbolsTest = password.match( | |
/(\w\d[!-\/.:-@\[-`{-~]|[!-\/.:-@\[-`{-~]\w\d|\d[!-\/.:-@\[-`{-~]\w)/g | |
) || 0; | |
if(_middleNumbersOrSymbolsTest !== 0) { | |
_middleNumbersOrSymbolsTest = _middleNumbersOrSymbolsTest.length * 2; | |
} | |
// check Passed Password Strength Additions test for _requirementsTest | |
const _flags = [_numberOfCharactersTest, _uppercaseLettersTest, | |
_lowercaseLettersTest, _numbersTest, _symbolsTest, | |
_middleNumbersOrSymbolsTest]; | |
const _passedMatches = $.grep(_flags, function (el) { | |
return el === true; | |
}).length; | |
_requirementsTest = _passedMatches * 2; | |
// Strength Bonus | |
_strength = _passwordLengthTest + _numberOfCharactersTest + | |
_uppercaseLettersTest + _lowercaseLettersTest + _numbersTest + | |
_symbolsTest + _middleNumbersOrSymbolsTest + _requirementsTest; | |
// Password Strength Deductions | |
_shortPasswordTest = _passwordLength < 8 ? | |
Math.min(_strength, 10) : 0; | |
_lettersOnlyTest = password.match(/^\w+$/g) ? | |
_passwordLength : 0; | |
_numbersOnlyTest = password.match(/^\d+$/g) ? _passwordLength : 0; | |
_repeatCharactersTest = password.split('').join('').match(/(.)\1+/g) || 0; | |
if(_repeatCharactersTest !== 0) { | |
_repeatCharactersTest = _repeatCharactersTest.length * 10; | |
} | |
_consecutiveUppercaseLettersTest = password.match(/[A-Z]{2,}/g) || 0; | |
if(_consecutiveUppercaseLettersTest !== 0) { | |
_consecutiveUppercaseLettersTest = | |
_consecutiveUppercaseLettersTest.length * 2; | |
} | |
_consecutiveLowercaseLettersTest = password.match(/[a-z]{2,}/g) || 0; | |
if(_consecutiveLowercaseLettersTest !== 0) { | |
_consecutiveLowercaseLettersTest = | |
_consecutiveLowercaseLettersTest.length * 2; | |
} | |
_consecutiveNumbersTest = password.match(/\d{2,}/g) || 0; | |
if(_consecutiveNumbersTest !== 0) { | |
_consecutiveNumbersTest = | |
_consecutiveNumbersTest.length * 2; | |
} | |
// Penalty | |
_penalty = _shortPasswordTest + _lettersOnlyTest + _numbersOnlyTest + | |
_repeatCharactersTest + _consecutiveUppercaseLettersTest + | |
_consecutiveLowercaseLettersTest + _consecutiveNumbersTest; | |
// Adjusted Strength | |
_strength -= _penalty; | |
_strength = _strength < 0 ? 0 : _strength > 100 ? 100 : _strength; | |
return _strength; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment