Skip to content

Instantly share code, notes, and snippets.

@inxilpro
Last active September 24, 2015 18:56
Show Gist options
  • Save inxilpro/8808757 to your computer and use it in GitHub Desktop.
Save inxilpro/8808757 to your computer and use it in GitHub Desktop.
<?php
function password_parts_message($password) {
$upper = 0;
$upperLetters = array();
$lower = 0;
$numbers = 0;
$special = 0;
$length = strlen($password);
for ($i = 0; $i < $length; $i++) {
$ascii = ord($password[$i]);
if ($ascii >= 48 && $ascii <= 57) {
$numbers++;
} else if ($ascii >= 65 && $ascii <= 90) {
$upper++;
$upperLetters[] = $password[$i];
} else if ($ascii >= 97 && $ascii <= 122) {
$lower++;
} else {
$special++;
}
}
if ((0 === $upper && $lower > 0) || (0 === $lower && $upper > 0)) {
// All one case
$case = (0 === $upper ? 'lower case' : 'upper case');
$plus = array();
if ($numbers) {
$plus[] = 'numbers';
}
if ($special) {
$plus[] = 'special characters';
}
$message = 'Please note that your password is all ' . $case;
if (count($plus)) {
$message .= ' letters plus ' . implode(' & ', $plus);
}
return $message;
} else {
// Mixed case
if (1 === $upper) {
return 'Please note that the "' . $upperLetters[0] . '" in your password is upper case';
} else {
$lastLetter = array_pop($upperLetters);
return 'Please note that the "' . implode('", "', $upperLetters) .
'" and "' . $lastLetter . '" in your password are ' .
(2 == $upper ? 'both' : 'all') . ' upper case';
}
}
}
// EXAMPLES
// -----------------------------------------------------------------------------
password_parts_message('LOL'); // Please note that your password is all upper case
password_parts_message('LOL012'); // Please note that your password is all upper case letters plus numbers
password_parts_message('LOL012!@#'); // Please note that your password is all upper case letters plus numbers & special characters
password_parts_message('LOL!@#'); // Please note that your password is all upper case letters plus special characters
password_parts_message('lol'); // Please note that your password is all lower case
password_parts_message('lol101'); // Please note that your password is all lower case letters plus numbers
password_parts_message('lol101!@#'); // Please note that your password is all lower case letters plus numbers & special characters
password_parts_message('lol!@#'); // Please note that your password is all lower case letters plus special characters
password_parts_message('Iol'); // Please note that the "I" in your password is upper case
password_parts_message('IOl'); // Please note that the "I" and "O" in your password are both upper case
password_parts_message('IOIlol'); // Please note that the "I", "O" and "I" in your password are all upper case
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment