Безплатни AJAX уроци

Проверка за сила на парола

Автор: trevata

Така… За този скрипт съм използвал библиотеката jQuery за AJAX ефектите. Повече информация за нея можете да намерите на официалния сайт http://jquery.com .
Така ще започна със файла със функциите – passCheck :

<?php
@header("Content-Type: text/html; charset=windows-1251");
function checkStrength($password)
{
if (strlen($password) == 0)
{
return false;
}

$passStrength = 0;

$length = strlen($password); //Взимаме дължината на паролата

// Проверяваме дали паролата не е само от малки букви
if(strtolower($password) != $password)
{
$passStrength += 4;
}

//Проверяваме дали паролата не е само от главни букви
if(strtoupper($password) == $password)
{
$passStrength += 4;
}

//Проверяваме дали паролата е м/у 8 и 15 символа
if($length >= 8 && $length <= 15)
{
$passStrength += 3;
}

//Проверяваме дали паролата е м/у 16 и 35 символа
if($length >= 16 && $length <=35)
{
$passStrength += 5;
}

//Проверяваме дали паролата е над 35 символа
if($length > 35)
{
$passStrength += 6;
}

//Взимаме числата от паролата
preg_match_all('/[0-9]/', $password, $numbers);
$passStrength += sizeof($numbers[0]) * 2; // Умножаваме броя на числата по 2

// Проверяваме за специални знаци
preg_match_all('/[|!@#$%&*\/=?,;.:\-_+~^\\\]/', $password, $specialchars);
$passStrength += sizeof($specialchars[0]) * 2; // Умножаваме броя на специалните символи по 2

//Броим уникалните символи в паролата
$chars = str_split($password);
$num_unique_chars = sizeof( array_unique($chars) );
$passStrength += $num_unique_chars * 3; //Умножаваме броя на уникални символи по 3

$passStrength = $passStrength > 99 ? 99 : $passStrength; // Проверяваме дали $strength е по-голямо от 99
$passStrength = floor($passStrength / 10 + 1); // Делим полученото число на 10 и събираме с 1

switch ($passStrength){
case 1: case 2: case 3:
$strengthWords = "Слаба";
break;
case 4: case 5: case 6:
$strengthWords = "Средна";
break;
case 7: case 8:
$strengthWords = "Силна";
break;
case 9: case 10:
$strengthWords = "Много силна";
break;
}

return $strengthWords;
}

function genPass($minchars=5, $maxchars=7, $usesymbol=0)
{
$chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz"; //символите, които искате да се появяват във паролата.

if ($usesymbol == 1){
$chars .= "!@#$%^&*()_+";
}

$i=0;

$repeat=mt_rand($minchars,$maxchars); //рандом стойност м/у двете избрани чрез параметрите зададени на функцията. По подразбиране м/у 5 и 7

// Докато $i е по-малко от $repeat
while ($i<$repeat)
{
$randompass.=$chars[mt_rand(1, strlen($chars)-1)]; //избираме си рандом символ от всички горепосочен
$i+=1;
}

echo $randompass;
}


if ($_REQUEST['parola']){
$password = $_REQUEST['parola'];
echo checkStrength($password);
}

if ($_REQUEST['newparola']){
echo genPass(10, 14, 1);
}

?>

Тук имаме 2 функции. Едната – checkStrength. Тя проверява силата на Вашата парола чрез прост алгоритъм. Отначало се задава една промелива $passStrength със стойност 0. Постепенно тази стойност се увеличава в зависимост от няколко неща: Съотношение между големи и малки букви, дължината на паролата, съдържанието на цифри във паролата, съдържанието на специални знаци във паролата (от сорта на !@#$ и т.н.) и уникалните символи в паролата. Накрая стойността на $passStrength се дели на 10 и се закръглява. Получава се число от 1 до 10, колкото по-високо е то, толкова по-силна е паролата. Има 1 параметър $password – Това е паролата зададена от потребителя.

Втората функция е genPass. Тук имаме 3 параметъра.

  1. $minchars – минималните символи за генерираната парола. По подразбиране е 5.
  2. $maxchars – максималните символи за генерираната парола. По подразбиране е 7.
  3. $usesymbol – този параметър приема две стойности 0 и 1, като по подразбиране е 0. Когато стойността му е 0 във паролата ви няма да се появяват символите !@#$%^&*()_+, ако е 1 тези символи ще бъдат на разположение.

На края на файла виждаме две проверки. Те проверяват дали има заявка от AJAX-а.

Ще продължа със JS файла main.js :

$(document).ready(function(){
$("#pass").keyup(function(){
$.ajax({
type: "POST",
url: "passCheck.php",
data: ({
parola: $("#pass").val()
}),
contentType: "application/x-www-form-urlencoded;charset=windows-1251",
success:function(data) {
$("#checkParola").text(data);
}
});
});

$("#newpass").click(function(){
$.ajax({
type: "POST",
url: "passCheck.php",
data: ({
newparola: 1
}),
contentType: "application/x-www-form-urlencoded;charset=windows-1251",
success:function(data) {
$("#newParola").text(data);
}
});
});
});

Нищо специално. Проверката за силата на паролата се изпраща при евент onKeyUp във елемента със id – pass. В случая този елемент е текстово поле. Евентът onKeyUp е моментът, когато пуснете копчето на клавиатурата. Праща една POST заявка със стойност parola. И показва отговора от сървъра във елемент със id – checkParola.

Втората функция се изпълнява при натискането на елемент с id – newpass. Пак праща POST заявка, но със стоност newpass. Отговорът от сървъра се получава във елемент с id – newParola.

И двете заявки се пращат във файла passCheck.php

Ето как изглежда и индекса:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Валидация на формуляр...</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script src="main.js" type="text/javascript"></script>
</head>

<body>
<form name="proveri" action="" method="post">
Парола: <input type="text" name="parola" id="pass" />
<div id="checkParola"></div><br />
<input type="button" name="genNewPass" id="newpass" value="Генерирай парола" />
<div id="newParola"></div>
</form>
</body>

</html>

Вашият коментар