Aprende a generar una cadena alfanumérica aleatoria de caracteres con una longitud personalizada en Java.

Muchos desarrolladores no saben cómo generar cadenas aleatorias con letras y dígitos. Esta característica puede ser realmente útil para generar identificadores aleatorios que usaremos temporalmente por algún motivo. En Java, hay muchas formas de generar tales cadenas.

En este artículo, te mostraremos 3 alternativas para generar cadenas aleatorias con Java fácilmente.

A. Genera una cadena alfanumérica aleatoria con caracteres específicos [a-ZA-Z0-9]

Para generar una cadena aleatoria con una implementación personalizada, puede utilizar el siguiente método como ayuda en su propio proyecto:

import java.security.SecureRandom;

/**
 * Este método devuelve una cadena aleatoria generada con SecureRandom
 * 
 * @param length
 * @return 
 */
public static String generateRandomString(int length) {
    // Puede personalizar los personajes que desea agregar a
    // las cadenas al azar
    String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
    String CHAR_UPPER = CHAR_LOWER.toUpperCase();
    String NUMBER = "0123456789";

    String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
    SecureRandom random = new SecureRandom();

    if (length < 1) throw new IllegalArgumentException();

    StringBuilder sb = new StringBuilder(length);
    
    for (int i = 0; i < length; i++) {
        // 0-62 (exclusive), retornos aleatorios 0-61
        int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length());
        char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);

        sb.append(rndChar);
    }

    return sb.toString();
}

Esta clase implementa un generador de cadenas aleatorias utilizando la clase SecureRandom de Java.security. Esta clase proporciona un generador de números aleatorios (RNG) criptográficamente fuerte. Un número aleatorio criptográficamente fuerte cumple mínimamente con las pruebas del generador de números aleatorios estadísticos especificadas en FIPS 140-2, Requisitos de seguridad para módulos criptográficos, sección 4.9.1. Además, SecureRandom debe producir una salida no determinista. Por lo tanto, cualquier material semilla que se pase a un objeto SecureRandom debe ser impredecible y todas las secuencias de salida de SecureRandom deben ser criptográficamente fuertes. 

Básicamente, solo necesita llamar al método generateRandomString proporcionando como primer argumento la longitud de la cadena que desea generar, por ejemplo:

// Tu propio paquete
package com.ourcodeworld.mavensandbox;

// Importar clase requerida
import java.security.SecureRandom;

/**
 * Ejemplo básico de cadenas aleatorias con SecureRandom
 * 
 */
public class Index {
    
    public static void main(String[] args){
        for (int i = 0; i < 5; i++) {
            System.out.println("Cadena aleatoria: " + generateRandomString(10));
            System.out.println("\n");
        }
    }
    
    /**
     * Este método devuelve una cadena aleatoria generada con SecureRandom
     * 
     * @param length
     * @return 
     */
    public static String generateRandomString(int length) {
        String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
        String CHAR_UPPER = CHAR_LOWER.toUpperCase();
        String NUMBER = "0123456789";

        String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
        SecureRandom random = new SecureRandom();
    
        if (length < 1) throw new IllegalArgumentException();

        StringBuilder sb = new StringBuilder(length);
        
        for (int i = 0; i < length; i++) {
            // 0-62 (exclusivo), retorno aleatorio 0-61
            int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length());
            char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);

            sb.append(rndChar);
        }

        return sb.toString();
    }
}

La clase anterior genera dentro de un bucle 5 cadenas aleatorias que se imprimirán en la consola, generará algo como:

Cadena aleatoria: iU5OHBDJ34

Cadena aleatoria: PDfkpDQMYz

Cadena aleatoria: 7OXEtv4PTT

Cadena aleatoria: CvYpocv3bE

Cadena aleatoria: yyBeOe5cee

B. Generar cadena aleatoria Apache Commons Lang

Si no desea implementar esta función por su cuenta, puede confiar en un paquete de terceros, específicamente uno de Apache. Las bibliotecas estándar de Java no proporcionan suficientes métodos para la manipulación de sus clases principales. Apache Commons Lang proporciona estos métodos adicionales.

El paquete Commons Lang proporciona una serie de utilidades auxiliares para la java.langAPI, en particular métodos de manipulación de cadenas, métodos numéricos básicos, reflexión de objetos, simultaneidad, creación y serialización y propiedades del sistema. Además, contiene mejoras básicas java.util.Datey una serie de utilidades dedicadas a ayudar con los métodos de construcción, como hashCode, toString y equals.

Si usa maven para manejar las dependencias de su proyecto, modifique el pom.xmlarchivo y agregue el paquete como una dependencia:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

O puede descargar el archivo .jar del paquete y agregarlo manualmente a su proyecto. Para obtener más información sobre este paquete, visite la página oficial en el repositorio de Maven . Después de incluir el paquete en su proyecto, podrá importar la RandomStringUtilsclase desde el paquete. En esta clase, puede llamar a los métodos estáticos para generar cadenas aleatorias:

  • RandomStringUtils.randomNumeric: Crea una cadena aleatoria cuya longitud es el número de caracteres especificado.
  • RandomStringUtils.randomAlphabetic: Crea una cadena aleatoria cuya longitud se encuentra entre el mínimo inclusivo y el máximo exclusivo. Los caracteres se elegirán del conjunto de caracteres alfabéticos latinos (az, AZ).
  • RandomStringUtils.randomAlphanumeric: Crea una cadena aleatoria cuya longitud es el número de caracteres especificado. Los caracteres se elegirán del conjunto de caracteres alfabéticos latinos (az, AZ) y los dígitos del 0 al 9.

Por ejemplo:

package com.ourcodeworld.mavensandbox;

// Importar clase requerida
import org.apache.commons.lang3.RandomStringUtils;

/**
 * Ejemplo básico de cadenas aleatorias con RandomStringUtils
 * 
 */
public class Index {
    
    public static void main(String[] args){
        System.out.println("\nCadena numérica: [0-9]");

        System.out.println(RandomStringUtils.randomNumeric(10));

        System.out.println("\nCadena alfabética: [a-zA-Z]");

        System.out.println(RandomStringUtils.randomAlphabetic(10));

        System.out.println("\nCadena alfanumérica: [a-zA-Z0-9]");

        System.out.println(RandomStringUtils.randomAlphanumeric(10));
    }
}

Este código generará una salida como:

Cadena numérica: [0-9]
9688507775

Cadena alfabética: [a-zA-Z]
BdNbwFqntH

Cadena alfanumérica: [a-zA-Z0-9]
IZdNATmcQs

C. Generación de un identificador único universal (UUID)

En caso de que desee generar un UUID en Java, el paquete util de Java ya ofrece una función para generar dicho ID. La clase UUID de Java.util representa un identificador único universal (UUID) inmutable. Un UUID representa un valor de 128 bits. Existen diferentes variantes de estos identificadores globales. Los métodos de esta clase son para manipular la variante Leach-Salz, aunque los constructores permiten la creación de cualquier variante de UUID (descrita a continuación).

Te mostraremos cómo generar este UUID con 2 variantes, la primera genera el ID con guiones (implementación predeterminada) y la segunda sin guiones:

package com.ourcodeworld.mavensandbox;

// Importar clase requerida
import java.util.UUID;

/**
 * Ejemplo básico de cadenas aleatorias con randomUUID
 * 
 */
public class Index {
    
    public static void main(String[] args){
        for (int i = 0; i < 5; i++) {
            System.out.println(generateRandomUUID());
        }

        for (int i = 0; i < 5; i++) {
            System.out.println(generateRandomUUIDWithoutDash());
        }
    }
    
     public static String generateRandomUUID() {
        return UUID.randomUUID().toString();
    }

    public static String generateRandomUUIDWithoutDash() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

Esto generará la siguiente salida:

eccfd644-07b0-4817-ae37-da394cc1e6d3
87d6524d-5892-437c-b8fa-a06f5f98f3a2
35949777-141d-4a7f-a868-d385f0c6d86a
1528594e-9687-42df-937d-241637746056
dc9b998a-83f2-4e83-83ba-9b0f5ba0be7a


b5cdbc574e8a4294b402234321818a4e
6b450556572d47228ea03bacf335c3ec
475d7823bd2d41c2a28b72aea6933526
eb1dba5a4e864bc1aa4655e671cd5201
ea40ef86685f4508a5429835d1aba78a

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores