> Faqs > Función para generar una clave con PHP

Función para generar una clave con PHP

Tenéis por ahí una función para generar una clave con PHP?

La función debe recibir un número de caracteres y crear una cadena aleatoria con ese numero de caracteres. Además debe contener necesariamente:

  • letras mayúsculas y minusculas
  • números
  • signos $ . / - _

Gracias!

Respuestas

Bueno, me he puesto y yo mismo he creado esta función, a ver qué os parece.

<?php  
function generarCadenaAleatoria($longitud) {
    // Creo cadenas con cada uno de los elementos que estoy solicitando como requisitos en la clave
    $letrasMayusculas = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $letrasMinusculas = 'abcdefghijklmnopqrstuvwxyz';
    $numeros = '0123456789';
    $signosPermitidos = '$./-_';
    // creo una cadena con todos los elementos juntos para el restante de caracteres
    $todosLosCaracteres = $letrasMayusculas . $letrasMinusculas . $numeros . $signosPermitidos;

    // Genero un carácter de cada tipo requerido, que siempre habrá en la cadena de manera obligatoria
    $cadenaAleatoria = '';
    $cadenaAleatoria .= $letrasMayusculas[rand(0, strlen($letrasMayusculas) - 1)];
    $cadenaAleatoria .= $letrasMinusculas[rand(0, strlen($letrasMinusculas) - 1)];
    $cadenaAleatoria .= $numeros[rand(0, strlen($numeros) - 1)];
    $cadenaAleatoria .= $signosPermitidos[rand(0, strlen($signosPermitidos) - 1)];

    // Completo el resto de la cadena aleatoriamente hasta la longitud que se ha suministrado por parámetro
    // La cadena al menos siempre tendrá una longitud mínima igual a los elmentos obligatiroos creados al inicio
    $longitudRestante = $longitud - strlen($cadenaAleatoria);
    for ($i = 0; $i < $longitudRestante; $i++) {
        $cadenaAleatoria .= $todosLosCaracteres[rand(0, strlen($todosLosCaracteres) - 1)];
    }

    // Se mezclan los caracteres de la cadena para desordenar la posición de los elementos
    $cadenaAleatoria = str_shuffle($cadenaAleatoria);

    return $cadenaAleatoria;
}
?>

Esta función hace todo lo solicitado. Quizás habría que hacer algo más que tuviera al menos un número de caracteres más amplio, pero eso no lo veo tan necesario, solamente es llamarla con una longitud adecuada.

Dejo un ejemplo de uso de la función:

<?php
$longitudDeseada = 10; // Cambia esto por la longitud deseada
$cadena = generarCadenaAleatoria($longitudDeseada);
echo $cadena;
?>
Agustín
233 5 15 13