web-dev-qa-db-fra.com

Création d'une chaîne aléatoire avec A-Z et 0-9 dans Java

Comme le titre le suggère, je dois créer un identifiant aléatoire de 17 caractères. Quelque chose comme "AJB53JHS232ERO0H1". L'ordre des lettres et des chiffres est également aléatoire. J'ai pensé à créer un tableau avec les lettres A à Z et une variable 'check' qui correspond à 1-2. Et en boucle;

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.

Mais je pense qu’il existe un moyen plus simple de le faire. Y a-t-il?

52
cbt

Ici, vous pouvez utiliser ma méthode pour générer une chaîne aléatoire

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;

    }

La méthode ci-dessus de mon sac utilise pour générer une chaîne de sel à des fins de connexion.

97
Suresh Atta

RandomStringUtils de Apache commons-lang pourrait aider:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()

Mise à jour 2017 : RandomStringUtils est obsolète. Vous devez maintenant utiliser RandomStringGenerator .

72
user180100

Trois étapes pour mettre en œuvre votre fonction:

Étape # 1 Vous pouvez spécifier une chaîne, y compris les caractères A-Z et 0-9.

Comme.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Étape n ° 2 Ensuite, si vous souhaitez générer un caractère aléatoire à partir de cette chaîne candidate. Vous pouvez utiliser

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

Étape Enfin, spécifiez la longueur de la chaîne aléatoire à générer (dans votre description, il s'agit de 17). Écrivez une boucle for et ajoutez les caractères aléatoires générés à l'étape 2 à l'objet StringBuilder.

Sur cette base, voici un exemple de classe publique 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();
}

}
10
MouseLearnJava

Vous pouvez facilement le faire avec une boucle 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();
}
4
Masudul