Heim php教程 PHP源码 一种密码复杂度的简单计算方式

一种密码复杂度的简单计算方式

May 25, 2016 pm 05:08 PM


 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;
	}
}
?>
Nach dem Login kopieren

                   

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)