Scalr::GenerateSecurePassword PHP Method

GenerateSecurePassword() public static method

Generates password that includes at least one symbols from each set: l - lower case characters u - upper case characters d - digits s - special characters
public static GenerateSecurePassword ( integer $length = 16, array $sets = null, array $enabledSets = null ) : string
$length integer optional Password length
$sets array optional User (re-)defined characters sets
$enabledSets array optional Names of enabled sets, if null — all sets are enabled
return string Returns generated password
    public static function GenerateSecurePassword($length = 16, array $sets = null, array $enabledSets = null)
    {
        static $predefinedSets = ['l' => 'abcdefghjkmnpqrstuvwxyz', 'u' => 'ABCDEFGHJKMNPQRSTUVWXYZ', 'd' => '1234567890', 's' => '!@#$%&*?'];
        $sets = empty($sets) ? $predefinedSets : array_merge($predefinedSets, $sets);
        if (!empty($enabledSets)) {
            $sets = array_intersect_key($sets, array_flip($enabledSets));
        }
        $password = '';
        foreach ($sets as $set) {
            $password .= $set[mt_rand(0, strlen($set) - 1)];
        }
        $all = implode($sets);
        $setLength = strlen($all) - 1;
        $length -= count($sets);
        for ($i = 0; $i < $length; $i++) {
            $password .= $all[mt_rand(0, $setLength)];
        }
        return str_shuffle($password);
    }

Usage Example

Example #1
0
 public function testMinimumComplexity()
 {
     $sets = ['l' => str_split('abcdefghjkmnpqrstuvwxyz'), 'u' => str_split('ABCDEFGHJKMNPQRSTUVWXYZ'), 'd' => str_split('1234567890'), 's' => str_split('!@#$%&*?')];
     for ($i = 0; $i < static::TEST_SETS_COUNT; $i++) {
         $password = str_split(\Scalr::GenerateSecurePassword(static::PASSWORD_LENGTH));
         foreach ($sets as $setName => $set) {
             $this->assertNotEmpty(array_intersect($password, $set), "Password doesn't contain any characters from the group '{$setName}'");
         }
     }
 }
All Usage Examples Of Scalr::GenerateSecurePassword