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?
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.
RandomStringUtils
de Apache commons-lang pourrait aider:
RandomStringUtils.randomAlphanumeric(17).toUpperCase()
Mise à jour 2017 : RandomStringUtils
est obsolète. Vous devez maintenant utiliser RandomStringGenerator .
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();
}
}
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();
}