Script para validar una clave en PHP

Voy a mostrar un script con el cual vamos a poder llamar una funcion que permite hacer las siguientes comprobaciones:

  • Que la clave tiene al menos 6 caracteres
  • Que el password tiene como máximo 16 caracteres
  • Que tiene al menos 1 letra minúscula
  • Que al menos tiene 1 letra mayúscula
  • Que tiene al menos un carácter numérico

Para hacer la función en realidad necesitaríamos recibir solamente la clave a ser validada y se devolvería un boleano para decir si es o no válida la contraseña. Pero por mejorarlo un poco, hemos decidido recibir dos parámetros, uno con la propia clave y otro con una variable que recibiremos por referencia y que rellenaremos con el error que se haya detectado, si es que no se validó el password.

La función para validar contraseñas

function validar_clave($clave,&$error_clave){
if(strlen($clave) < 6){
$error_clave = «La clave debe tener al menos 6 caracteres»;
return false;
}
if(strlen($clave) > 16){
$error_clave = «La clave no puede tener más de 16 caracteres»;
return false;
}
if (!preg_match(‘`[a-z]`’,$clave)){
$error_clave = «La clave debe tener al menos una letra minúscula»;
return false;
}
if (!preg_match(‘`[A-Z]`’,$clave)){
$error_clave = «La clave debe tener al menos una letra mayúscula»;
return false;
}
if (!preg_match(‘`[0-9]`’,$clave)){
$error_clave = «La clave debe tener al menos un caracter numérico»;
return false;
}
$error_clave = «»;
return true;
}

Como hemos podido ver, es una función bien simple. Va revisando punto por punto todas las cosas que queremos comprobar en la clave. Usa expresiones regulares bien sencillas para saber si tiene al menos una letra (una expresión para ver si tiene minúsculas y otra para mayúsculas) y al menos un número.

Podríamos añadir o quitar de la función tantas validaciones como deseemos, para que se ajuste a nuestras necesidades. Por ejemplo, si además deseásemos que la contraseña tuviera sólo caracteres alfanuméricos (números y letras), podríamos haber utilizado también la función PHP ctype_alnum(), que recibe un string y devuelve TRUE si sólo encontró números y letras en esa cadena y FALSE si encontró otro tipo de caracteres.

Para probar esta función hemos hecho una página bien simple, que muestra un formulario con un campo password y recibe ese campo para validarlo, mostrando el resultado de la validación y el posible error que se haya encontrado.


<html>
<head>
<title>Validar Password</title>
</head>

<body>
<?

function validar_clave($clave,&$error_clave){
if(strlen($clave) < 6){
$error_clave = «La clave debe tener al menos 6 caracteres»;
return false;
}
if(strlen($clave) > 16){
$error_clave = «La clave no puede tener más de 16 caracteres»;
return false;
}
if (!preg_match(‘`[a-z]`’,$clave)){
$error_clave = «La clave debe tener al menos una letra minúscula»;
return false;
}
if (!preg_match(‘`[A-Z]`’,$clave)){
$error_clave = «La clave debe tener al menos una letra mayúscula»;
return false;
}
if (!preg_match(‘`[0-9]`’,$clave)){
$error_clave = «La clave debe tener al menos un caracter numérico»;
return false;
}
$error_clave = «»;
return true;
}

if ($_POST){
$error_encontrado=»»;
if (validar_clave($_POST[«clave»], $error_encontrado)){
echo «PASSWORD VÁLIDO»;
}else{
echo «PASSWORD NO VÁLIDO: » . $error_encontrado;
}
}

?>
<P>
<form action=»validar-password.php» method=»post»>
Escribe una clave:
<input type=password name=»clave»>
<input type=»submit» value=»Enviar»>
</form>

</body>
</html>