¿Cómo puedo crear un algoritmo para generar cadenas aleatorias?

Quiero generar cadenas aleatorias como:

sssder tvmwww 66rfdd 123123 oo007oo 1234 2020 1111 rrrr r8r8r uiuiu wewewe fefefe abced xyz.. 

Específicamente, quiero una cadena con una longitud de 5 a 8 caracteres que sea ​​fácil de recordar . es posible?

Lo que estás buscando es un generador de cuerdas mnemónico, aquí está la función:

 function Mnemonic($letters = 6) { $result = null; $charset = array ( 0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'), 1 => array('a', 'e', 'i', 'o', 'u'), ); for ($i = 0; $i < $letters; $i++) { $result .= $charset[$i % 2][array_rand($charset[$i % 2])]; } return $result; } 

Actualizado para permitir dígitos al final de la cadena:

 function Mnemonic($letters = 6, $digits = 2) { $result = null; $charset = array ( 0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'), 1 => array('a', 'e', 'i', 'o', 'u'), ); for ($i = 0; $i < $letters; $i++) { $result .= $charset[$i % 2][array_rand($charset[$i % 2])]; } for ($i = 0; $i < $digits; $i++) { $result .= mt_rand(0, 9); } return $result; } 

Aquí hay una fuente de un script bastante complicado que tiene una definición de secuencia similar a BNF y genera una cadena coincidente al seleccionar aleatoriamente las posibilidades. Estas páginas contienen algunas definiciones de ejemplo. Tal vez eso pueda ser de utilidad.

Vea esta publicación para una función corta de PHP para generar una cadena de caracteres de teclado utilizable al azar de una longitud específica (ya que esto parece un generador de contraseñas). Aquí está la función copiada de esa publicación.

 function rand_char($length) { $random = ''; for ($i = 0; $i < $length; $i++) { $random .= chr(mt_rand(33, 126)); } return $random; } 

Depende de lo que quieras de las cuerdas. De los ejemplos que proporcionó, parece que quiere algo de dos pasos; por ejemplo, una función que genera una cadena aleatoria de tres caracteres, luego dobla cada carácter; o repite la cadena; o repite el primer carácter tres veces, el segundo dos veces y el tercero, pero una vez.

Básicamente lo que probablemente quiera hacer es crear un “grupo”, digamos una cadena corta adecuada que se genere con un método seleccionado al azar (todos los números, números secuenciales con inicio aleatorio, letras secuenciales, partes de palabras seleccionadas al azar de un diccionario … .) y luego una función que infla la cuerda de acuerdo con algún principio.

Pruebe esto: Secuencia de caracteres alfanuméricos aleatorios Secuencia de comandos en PHP

http://www.i-fubar.com/random-string-generator.php

Si esto es para identificaciones aleatorias o algo similar, recomiendo

uniqid (…)

http://us3.php.net/manual/en/function.uniqid.php> http://us3.php.net/manual/en/function.uniqid.php

Usa un algoritmo genético. Configure su función de aptitud para decidir qué tan “aleatoria” es su cuerda (es decir, ¿hay dos consonantes adyacentes? Bueno, eso no es tan bueno como un símbolo o número al lado de una consonante … pero ¿qué tan separadas están las consonantes en el alfabeto? ¿Es el mismo caso?) Déjalo funcionar durante un par de días, y tendrás la garantía de encontrar la cadena de 5 a 8 caracteres más fantástica y aleatoria que alguna vez hubieras esperado.

Empezaré con algunas conjeturas personales sobre “fácil de recordar”:

Una cadena generalmente es fácil de recordar si hay uno o más patrones, como:

  • tiene repeticiones de personajes
  • tiene secuencias de caracteres (abc, 1-2-3)
  • “suena” como una palabra (secuencias de fonemas que imitan palabras reales: “diskow”)

Escriba un progtwig que “puntúe” las secuencias aleatorias generadas en base a las reglas, y tome las puntuaciones más altas. Es como un método de Monte Carlo para encontrar el resultado que desea. Puede ajustar su método de puntuación si no le gusta la salida.

Por supuesto, hay otras cadenas “fáciles de recordar” que no se ajustan a lo anterior:

  • si tiene un significado personal (tu cumpleaños)
  • si se repite MUCHO … (todos saben pi = 3.1415 porque estamos entrenados para saberlo) Aunque, yo diría que PI se describe mejor como fácil de recordar, en lugar de fácil de recordar (almacenar en la memoria) .

Un enfoque fácil puede ser:

1) inicializa una cadena vacía
2) generar un número aleatorio entre [0,25]
3) Agregue 97 a ese número
4) generar un personaje para ese número
5) añadir el carácter a la cadena existente
* ejecute los pasos 1-5 para el número de veces, igual a la longitud de la cadena.

Digamos que quiero cuerdas de longitud 6-10. para cada cadena necesitas ejecutar este fragmento de código

 i = rand (6,10) str = ""; while(i--) { num = rand (97,97+25); c = chr(num); str = str.c; }