Scripts

[Functie] Wachtwoord complexheid

Het controleren van een wachtwoord in PHP kan nogal lastig zijn. De lengte kan iedereen wel controleren. Maar hoe zit het nou met hoofdletters en kleine letters? Dan wordt het al een stuk moeilijker. Je kan bijvoorbeeld elke karakter van het wachtwoord gaan vergelijken met a-z, A-Z en 0-9. Maar dat is ondoenelijk. En wat dan als je vreemde tekens wilt: ^&

functie-wachtwoord-complexheid
<?php
function check_password($password,$length,$complex) {
  // To check a password for it's length and complexibility
  $ok = TRUE;
  $int = 0;
  $lower = 0;
  $upper = 0;
  $comp = 0;

  // Length
  $l = strlen($password);

  // Check length
  if($l < $length) {
    $ok = FALSE;
  }

  for($i=0;$i<$l;$i++) {
    $s = ord($password{$i});  // Gives decimal ASCII-value of $i-th char in string
    
    // Check what kinda char
    if($s >= 48 && $s <= 57) $int++;  // INT
    else if ($s >= 97 && $s <= 122) $lower++;  // LOWER CHAR
    else if ($s >= 65 && $s <= 90) $upper++;  // UPPER CHAR
    else if (($s >= 33 && $s <= 47) || ($s >= 58 && $s <= 64) || ($s >= 91 && $s <= 96 || ($s >= 123 && $s <= 126))) $comp++;  // COMPLEX
  }
  
  if($complex > 0) {
    switch ($complex) {
      case 1:
        // Check $password on chars and ints
        if($int < 1 || ($lower < 1 && $upper < 1)) $ok = FALSE;
        break;
      case 2:
        // check $password on ints, lower and upper chars
        if($int < 1 || $lower < 1 || $upper < 1) $ok = FALSE;
        break;
      case 3:
        // check $password on ints, lower chars, upper chars and complex chars
        if($int < 1 || $lower < 1 || $upper < 1 || $comp < 1) $ok = FALSE;
        break;
    }
  }
  return $ok;
}
?>

Reacties

0
Nog geen reacties.