За този скрипт съм използвал библиотеката jQuery за AJAX ефектите. Повече информация за нея можете да намерите на официалния сайт http://jquery.com .
Така ще започна със файла със функциите - passCheck :
@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
Ето как изглежда и индекса:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Валидация на формуляр...