Creating a random string with A-Z and 0-9 in Java [duplicate]

As the title suggest I need to create a random, 17 characters long, ID. Something like "AJB53JHS232ERO0H1". The order of letters and numbers is also random. I thought of creating an array with letters A-Z and a 'check' variable that randoms to 1-2. And in a loop;

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. 

But I feel like there is an easier way of doing this. Is there?

2

4 Answers

Here you can use my method for generating 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; } 

The above method from my bag using to generate a salt string for login purpose.

6

RandomStringUtils from Apache commons-lang might help:

RandomStringUtils.randomAlphanumeric(17).toUpperCase() 

2017 update: RandomStringUtils has been deprecated, you should now use RandomStringGenerator.

5

Three steps to implement your function:

Step#1 You can specify a string, including the chars A-Z and 0-9.

Like.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 

Step#2 Then if you would like to generate a random char from this candidate string. You can use

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

Step#3 At last, specify the length of random string to be generated (in your description, it is 17). Writer a for-loop and append the random chars generated in step#2 to StringBuilder object.

Based on this, here is an example public class 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(); } } 

You can easily do that with a for loop,

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(); } 

You Might Also Like