<?php

/*=================================*\
| +-------------------------------+ |
| |     Passwortstärke prüfen     | |
| |-------------------------------| |
| |    http://www.phpbuddy.eu/    | |
| +-------------------------------+ |
\*=================================*/

// UTF-8 Header
header'Content-Type: text/html; charset=utf-8' );

// Variablen initialisieren
$ausgaben '';
$staerke  0;
$pw       '';

// Prüfen ob das Formular abgeschickt wurde
if (isset( $_POST['submit'] ) AND
    !empty( 
$_POST['passwort'] ))
{
    
/************************************/
    /* Qualität des Passworts ermitteln */
    /************************************/
    // Passwort umladen um nachfolgend etwas Tipparbeit zu sparen ;-)
    
$pw $_POST['passwort'];

    
// Prüfen ob Kleinuchstaben enthalten sind
    
if (preg_match"/[a-z]+/"$pw ))
    {
        
// Stärkewert erhöhen
        
$staerke++;
    }

    
// Prüfen ob Großbuchstaben enthalten sind
    
if (preg_match"/[A-Z]+/"$pw ))
    {
        
// Stärkewert erhöhen
        
$staerke++;
    }

    
// Prüfen ob Zahlen enthalten sind
    
if (preg_match"/\d+/"$pw ))
    {
        
// Stärkewert erhöhen
        
$staerke++;
    }

    
// Prüfen ob Sonderzeichen (!, ?, $, Leerzeichen, usw.) enthalten sind
    
if (preg_match"/\W+/"$pw ))
    {
        
// Stärkewert erhöhen
        
$staerke++;
    }

    
// Passwort Standardlänge (mindestens 6 Zeichen, maximal 15 Zeichen) prüfen
    
if (strlen$pw ) >= AND
        
strlen$pw ) <= 15)
    {
        
// Stärkewert erhöhen
        
$staerke++;
    }
    
// Passwort relativ sichere Länge (mehr als 15 Zeichen) prüfen
    
elseif (strlen$pw ) > 15)
    {
        
// Stärkewert um 2 erhöhen, da die Passwortlänge das wichtigste Sicherheitskriterium darstellt
        
$staerke $staerke 2;
    }
    
// Zu kurzes Passwort wird auf niedrigsten Wert herabgestuft
    
elseif (strlen$pw ) < 6)
    {
        
$staerke 1;
    }
}

// Meldung für die Ausgabe
switch ($staerke)
{
    case 
$ausgabe 'Das Passwort ist sehr schwach.'; break;
    case 
$ausgabe 'Das Passwort ist schwach.'; break;
    case 
$ausgabe 'Das Passwort ist OK aber nicht wirklich sicher.'; break;
    case 
$ausgabe 'Das Passwort ist stark.'; break;
    case 
$ausgabe 'Das Passwort ist sehr stark.'; break;
    case 
$ausgabe 'So und nicht anders sollte ein sicheres Passwort aussehen!'; break;
    default: 
$ausgabe 'Bitte ein Passwort eingeben.'; break;
}

?>
<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="utf-8" />
    <title>Formular mit Passwortstärke</title>
</head>

<body>

    <h3><?php echo $ausgabe?></h3>

    <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
        <label for="passwort">Passwort: </label>
        <input type="text" name="passwort" id="passwort" value="<?php echo $pw?>" />
        <input type="submit" name="submit" id="submit" value="OK" />
    </form>

    <hr />
    
    <h4>Ein sicheres Passwort sollte diese Kriterien erfüllen:</h4>
    <ul>
        <li>Kleinbuchstaben</li>
        <li>Großbuchstaben</li>
        <li>Zahlen</li>
        <li>Sonderzeichen wie ! ? $ " / ( ] usw.</li>
        <li>Zeichenlänge - je länger je besser, mindestens 6 Zeichen, optimalerweise 15 oder mehr Zeichen</li>
        <li>Normale Wörter wie Vornamen, Stadtnamen, Gegenstände, usw. vermeiden</li>
    </ul>
</body>
</html>