Подтвердить что ты не робот

Создание случайной строки с A-Z и 0-9 в Java

Как следует из названия, мне нужно создать случайный идентификатор длиной 17 символов. Что-то вроде "AJB53JHS232ERO0H1". Порядок букв и цифр также случайный. Я думал о создании массива с буквами A-Z и переменной "check", которая randoms до 1-2. И в цикле;

Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.

Но я чувствую, что есть более простой способ сделать это. Есть?

4b9b3361

Ответ 1

Здесь вы можете использовать мой метод для создания Random String

protected String getSaltString() {
        String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt = new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.charAt(index));
        }
        String saltStr = salt.toString();
        return saltStr;

    }

Вышеуказанный метод из моего мешка, используемого для генерации строки солей для целей входа.

Ответ 2

RandomStringUtils от Apache commons-lang может помочь:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()

Обновление 2017: RandomStringUtils устарело, теперь вы должны использовать RandomStringGenerator.

Ответ 3

Три шага для реализации вашей функции:

Шаг # 1 Вы можете указать строку, включая символы A-Z и 0-9.

Как.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Шаг # 2 Затем, если вы хотите создать случайную char из этой строки-кандидата. Вы можете использовать

 candidateChars.charAt(random.nextInt(candidateChars.length()));

Шаг # 3 Наконец, укажите длину произвольной строки, которая будет сгенерирована (в вашем описании это 17). Writer для цикла и добавьте случайные символы, сгенерированные на шаге 2, в объект StringBuilder.

Исходя из этого, вот пример   открытый класс RandomTest {

public static void main(String[] args) {

    System.out.println(generateRandomChars(
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 17));
}

/**
 * 
 * @param candidateChars
 *            the candidate chars
 * @param length
 *            the number of random chars to be generated
 * 
 * @return
 */
public static String generateRandomChars(String candidateChars, int length) {
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
        sb.append(candidateChars.charAt(random.nextInt(candidateChars
                .length())));
    }

    return sb.toString();
}

}

Ответ 4

Вы можете легко сделать это с помощью цикла for,

public static void main(String[] args) {
  String aToZ="ABCD.....1234"; // 36 letter.
  String randomStr=generateRandom(aToZ);

}

private static String generateRandom(String aToZ) {
    Random rand=new Random();
    StringBuilder res=new StringBuilder();
    for (int i = 0; i < 17; i++) {
       int randIndex=rand.nextInt(aToZ.length()); 
       res.append(aToZ.charAt(randIndex));            
    }
    return res.toString();
}