Ruby genera cadena aleatoria

Ruby genera cadena aleatoria

Las cadenas aleatorias son características útiles en varios casos, como cifrado, semillas de datos y más. Aunque es imposible crear un valor genuinamente arbitrario utilizando máquinas deterministas, podemos obtener un conjunto de valores pseudorandom que aparecen aleatoriamente generados.

Esta guía le mostrará cómo generar una cadena aleatoria usando Ruby. Dado que una cadena es una variedad de caracteres alfanuméricos, comenzaremos con lo básico y generaremos números y caracteres aleatorios.

Generando un número aleatorio

Antes de centrarnos en generar cadenas aleatorias en Ruby, aprendamos a generar un número aleatorio en Ruby.

Utilizamos el método RAND para generar números aleatorios. Si llama al método RAND sin argumentos, genera un número flotante en el rango de 0.0 y 1.0

rand ()
=> 0.041586206067679155

La función RAND también le permite pasar un entero como argumento. Si el método tiene un valor entero proporcionado, generará un valor entero aleatorio en el rango de 0 al valor especificado.

Rand (10)
=> 5

En el ejemplo anterior, cada vez que ejecute el método anterior, obtendrá un valor entre 0 y 10, exclusivo.

Supongamos que desea generar un número aleatorio dentro de un rango específico. En tal escenario, puede especificar el rango como:

Empiece ... pare

Por ejemplo, para generar un valor aleatorio entre 30 y 60:

Rand (30 ... 60)
=> 42

El ejemplo anterior es exclusivo del valor final. Esto significa que 60 no se incluirán como un valor aleatorio.

Si desea incluir un valor final, use la notación de doble punto como:

Rand (30 ... 60)
=> 60

Generando una cadena aleatoria

Aunque hay varias formas de generar una cadena aleatoria en Ruby, nos quedaremos con una simple que utiliza métodos y funcionalidad de rubí incorporados.

Paso 1 - Generar la matriz de caracteres

El primer método es generar una variedad de caracteres. Para hacer esto, utilizaremos el método de rango en Ruby.

Por ejemplo, el siguiente código genera una matriz de caracteres minúsculas.

('A' ... 'Z')

A continuación, necesitamos convertir la salida del código anterior en una matriz. Podemos usar el método TO_A como:

('A' ... 'Z').a_a

El método anterior nos dará una variedad de personajes.

Solo puedes usar caracteres en minúsculas solo. Puedes generar caracteres mayúsculas como:

('A' ... 'Z').a_a

Paso 2 - baraja los personajes generados

En el ejemplo anterior, generamos una matriz de caracteres en orden secuencial. Por lo tanto, los valores no están en orden aleatorio.

Para introducir aleatoriedad para cada vez que se llama al bloque, podemos usar el método Shuffle.

El método Shuffle devolverá una nueva matriz con los elementos en la matriz anterior barajada.

Tome el primer ejemplo de matriz y la baraja.

('A' ... 'Z').a_a.barajar

En este ejemplo, los personajes se barajan en un orden aleatorio cada vez que ejecutamos el código.

Paso 3 - Convertir a cadena

Hasta este punto, solo hemos creado una variedad de personajes. El siguiente paso es convertir los caracteres en la matriz a una sola cadena, que podemos lograr utilizando el método de unión.

Por ejemplo:

a_a.barajar.unirse
=> "mixwnezhjckusqogyprvvfdblta"

Ejecución del código anterior devolverá una cadena aleatoria de caracteres minúsculas.

Paso 4 - Más aleatoriedad

Podemos introducir más aleatoriedad a nuestra cadena generada introduciendo caracteres mayúsculas y valores numéricos.

Podemos hacer esto por:

[ *'A' ... 'Z', *0 ... 9, *'A' ... 'Z']

El ejemplo anterior generará una matriz de valores minúsculas, mayúsculas y numéricos.

Para aleatorizarlos, use el método Shuffle y une para crear una cadena. A continuación se muestra una salida de ejemplo:

[ *'A' ... 'Z', *0 ... 9, *'A' ... 'Z'].barajar.unirse
"BC1U0HF3ZQBTQHTYN72VXRLWS6GL4KPAGPDK98UAWSJIJFNEIMCOZEY5ROMVDX"

Supongamos que queremos obtener una cadena de una longitud específica. Por ejemplo, para generar una cadena de longitud 10. Podemos pasar el rango al método Shuffle como:

[ *'A' ... 'Z', *0 ... 9, *'A' ... 'Z'].barajar [0 ... 10].unirse
=> "ncnerkw78ms"

Método 2 -securerandom módulo

Ruby también proporciona el paquete SecureRandom para generar cuerdas aleatorias. Admite hexadecimal, base64 y bytes.

Para usarlo, importarlo como:

requiere 'Secureandom'
=> verdadero

Genere un valor aleatorio de base64 como:

Seguridad.base64
=> "CXZPK1ZBBBC/ODU1FSAPWG =="

Para Hex, entra:

Seguridad.maleficio
=> "86dc7bcec3962153efef36585696920f" "

Finalmente, usando bytes:

Seguridad.random_bytes
=> "\ xe6) \ x8e \ xf4 \ xd9 \ xe1w \ x1du \ xa2 \ x7f \ x86 \ x97z \ b."

Clausura

Esta guía cubre cómo generar valores aleatorios en Ruby utilizando métodos y módulos preconstruidos.