一种密码复杂度的简单计算方式
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 防火墙模块
- 下一篇:百度网盘文件直链
精彩图集
精彩文章






