一种密码复杂度的简单计算方式
span style=color:#000000;另外,我实现了一个更为直接的JS版本/span a href=http://www.oschina.net/code/snippet_127301_17269 target=_blank rel=nofollowbr / br / JS版本/a br / br / * 计算密码复杂度的简单规则: br /
另外,我实现了一个更为直接的JS版本
JS版本
* 计算密码复杂度的简单规则:
* 密码为Gre72的密码复杂度为G-r-e-7-2,每一个字符有本身的复杂度,转换(横线)代表的复杂度也已经定义,总和就是最终复杂度
* 最后,考虑到规律性密码,比如123456,对这一类密码,如果发现前后两个字符有规律,则单独计算(如何算规律,以及如何计算规律复杂度,则完全自定义)
* 我这里采用的是(字符重复,字符递增或递减,数字递增为递减为规律,且规律复杂度为0)
* 这是一种简单的密码复杂度计算方式,适用于简单情形
JS版本
* 计算密码复杂度的简单规则:
- 将字符分为四类:数字,小写字母,大写字母,特殊字符(@#!之类)
- 赋予上述每一类字符一种复杂度,例如将数字的复杂度定义为1,特殊字符的复杂度定义为4
- 赋予每一种字符的变换一种复杂度,例如数字转换为特殊字符的复杂度为2,数字转数字的复杂度为0,数字转小写字符的复杂度为1
* 密码为Gre72的密码复杂度为G-r-e-7-2,每一个字符有本身的复杂度,转换(横线)代表的复杂度也已经定义,总和就是最终复杂度
* 最后,考虑到规律性密码,比如123456,对这一类密码,如果发现前后两个字符有规律,则单独计算(如何算规律,以及如何计算规律复杂度,则完全自定义)
* 我这里采用的是(字符重复,字符递增或递减,数字递增为递减为规律,且规律复杂度为0)
* 这是一种简单的密码复杂度计算方式,适用于简单情形
<?php /** * 计算密码复杂度的简单规则: * 1)将字符分为四类:数字,小写字母,大写字母,特殊字符(@#!之类) * 2)赋予上述每一类字符一种复杂度,例如将数字的复杂度定义为1,特殊字符的复杂度定义为4 * 3)赋予每一种字符的变换一种复杂度,例如数字转换为特殊字符的复杂度为2,数字转数字的复杂度为0,数字转小写字符的复杂度为1 * 这样一来,整个密码的复杂度就转换为每一种字符的复杂度+字符之间的变换的复杂度的总和,比如: * 例如密码为Gre72的密码复杂度为G-r-e-7-2,每一个字符有本身的复杂度,转换(横线)代表的复杂度也已经定义,总和就是最终复杂度 * 最后,考虑到规律性密码,比如123456,对这一类密码,如果发现前后两个字符有规律,则单独计算(如何算规律,以及如何计算规律复杂度,则完全自定义) * 我这里采用的是(字符重复,字符递增或递减,数字递增为递减为规律,且规律复杂度为0) * * 这是一种简单的密码复杂度计算方式,适用于简单情形 * @author Administrator * */ class Password { private static $typeComplexs = array(1 => 1, 2, 3, 4); private static $typeChange = array(array(1, 2), array(1, 3), array(1, 4), array(2, 3), array(2, 4), array(3, 4)); private static $typeChangeComplexs = array(1, 1, 2, 1, 2, 2); public static function computeComplex($password) { $complex = 0; $password = (string)$password; $length = strlen($password); $prefixType = 0; $regularChars = array(); for($i = 0; $i < $length; $i++){ if(ctype_digit($password[$i])){ $type = 1; }elseif(ctype_lower($password[$i])){ $type = 2; }elseif(ctype_upper($password[$i])){ $type = 3; }else{ $type = 4; } if(!in_array($password[$i], $regularChars)){ //规律性字符,不计入复杂度 $complex += self::$typeComplexs[$type]; if($prefixType){ $changeType = array($type, $prefixType); sort($changeType); $change = array_search($changeType, self::$typeChange); if($change !== false){ $complex += self::$typeChangeComplexs[$change]; } } } $prefixType = $type; $regularChars = self::getRegularChars($password[$i], $prefixType); } return $complex; } /** * 获取一个字符的规律字符集 * 下列规则被认为是有规则的 * 1)重复字符 * 2)数字递增或者递减 * 3)字母递增或者递减 * @param unknown_type $prefixChar */ private static function getRegularChars($prefix, $prefixType) { $regularChars = array($prefix); switch($prefixType){ case 1: $regularChars[] = $prefix + 1; $regularChars[] = $prefix - 1; break; case 2: case 3: $regularChars[] = chr(ord($prefix) + 1); $regularChars[] = chr(ord($prefix) - 1); $regularChars = array_filter($regularChars, 'ctype_alnum'); break; } return $regularChars; } } ?>
- 上一篇:EasySite FireWall 防火墙模块
- 下一篇:百度网盘文件直链
精彩图集
精彩文章