19

Как сгенерировать случайную алфавитно-цифровую строку

23

Проблема: Я ищу простой алгоритм на Java для генерации псевдослучайной алфавитно-цифровой строки. В моем случае это будет использоваться в качестве уникального идентификатора сессии/ключа, который «вероятно» будет уникальным при создании более 500К+ строк (мои потребности не требуют ничего более сложного).

Идеально было бы иметь возможность задавать длину строки в зависимости от моих потребностей в уникальности. Например, сгенерированная строка длиной 12 символов может выглядеть как "AEYGF7K0DM1X".

5 ответ(ов)

8

Java предоставляет способ сделать это напрямую. Если вы не хотите, чтобы в строке были дефисы, их легко удалить. Просто используйте uuid.replace("-", "").

Вот пример кода, генерирующего строку UUID:

import java.util.UUID;

public class RandomStringGenerator {
    public static void main(String[] args) {
        System.out.println(generateString());
    }

    public static String generateString() {
        String uuid = UUID.randomUUID().toString();
        return "uuid = " + uuid;
    }
}

Вывод

uuid = 2d7428a6-b58c-4008-8575-f05549f16316

Если вы хотите вернуть UUID без дефисов, измените метод generateString следующим образом:

public static String generateString() {
    String uuid = UUID.randomUUID().toString().replace("-", "");
    return "uuid = " + uuid;
}

Теперь вывод будет выглядеть так:

uuid = 2d7428a6b58c40088575f05549f16316
6

Вот перевод вашего кода на русский язык, оформленный в стиле ответа на StackOverflow:


Вы можете создать случайную строку заданной длины, используя следующий код на Java:

static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static SecureRandom rnd = new SecureRandom();

String randomString(int len) {
   StringBuilder sb = new StringBuilder(len);
   for (int i = 0; i < len; i++) {
      sb.append(AB.charAt(rnd.nextInt(AB.length())));
   }
   return sb.toString();
}

Объяснение кода:

  1. AB - это строка, содержащая допустимые символы для генерации случайной строки. Включает цифры, заглавные и строчные буквы.
  2. SecureRandom rnd - объект SecureRandom используется для крепкой генерации случайных чисел.
  3. randomString(int len) - метод, который принимает целое число len, указывающее длину генерируемой строки.
  4. Внутри метода создается StringBuilder, к которому поочередно добавляются случайные символы из строки AB, выбранные с помощью rnd.nextInt(AB.length()), который генерирует случайный индекс.

Этот код можно использовать, например, для создания случайных паролей или идентификаторов. Убедитесь, что длина, передаваемая методу randomString, положительна, чтобы избежать ошибок.

Если у вас возникнут дополнительные вопросы по этому коду или его использованию, не стесняйтесь задавать!

0

Вот короткое и простое решение, но оно использует только строчные буквы и цифры:

Random r = new java.util.Random();
String s = Long.toString(r.nextLong() & Long.MAX_VALUE, 36);

Размер строки составляет примерно 12 цифр в системе счисления с основанием 36, и улучшить его дальнейшим образом не представляется возможным. Конечно, вы можете объединить несколько экземпляров, если вам нужно больше символов.

0

Вот пример кода на Java для генерации случайной алфавитно-цифровой строки заданной длины:

import static java.lang.Math.round;
import static java.lang.Math.random;
import static java.lang.Math.pow;
import static java.lang.Math.abs;
import static java.lang.Math.min;
import static org.apache.commons.lang.StringUtils.leftPad;

public class RandomAlphaNum {
    public static String gen(int length) {
        StringBuffer sb = new StringBuffer();
        for (int i = length; i > 0; i -= 12) {
            int n = min(12, abs(i));
            sb.append(leftPad(Long.toString(round(random() * pow(36, n)), 36), n, '0'));
        }
        return sb.toString();
    }
}

Вот пример использования этого метода:

scala> RandomAlphaNum.gen(42)
res3: java.lang.String = uja6snx21bswf9t89s00bxssu8g6qlu16ffzqaxxoy

Код создает строку, состоящую из случайных букв и цифр, длиной 42 символа. Он использует класс Math для генерации случайных чисел и StringBuffer для построения итоговой строки. Метод leftPad из библиотеки Apache Commons Lang используется для дополнения строки нулями до нужной длины.

0

Альтернативное решение на Java 8 может выглядеть следующим образом:

static final Random random = new Random(); // Или SecureRandom
static final int startChar = (int) '!';
static final int endChar = (int) '~';

static String randomString(final int maxLength) {
    final int length = random.nextInt(maxLength + 1);
    return random.ints(length, startChar, endChar + 1)
        .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();
}

Этот код генерирует случайную строку, состоящую из символов в диапазоне от ! до ~. В качестве параметра maxLength можно задать максимальную длину генерируемой строки. Сначала определяется длина строки с помощью метода nextInt, а затем создаются случайные коды символов, которые собираются в StringBuilder и преобразуются в строку.

Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь