How do I generate a random string?

How does one generate a random string sequence with Apex? I need to generate a code when a particular object is created in our Salesforce environment. I’d like the code to contain numbers from 0-9 and letters from A-Z.

Searching their rather awful developer forums I found:

Blob blobKey = crypto.generateAesKey(128);
String key = EncodingUtil.convertToHex(blobKey);
return key.substring(0,len);

However this isn’t going to cover a very large range of letters.

In the C# world something like the following would do the trick:

var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
    Enumerable.Repeat(chars, numberOfCharacters)
              .Select(s => s[random.Next(s.Length)])
              .ToArray()
);

Is there an easy way to do something similar in Apex that I’m just not familiar with?

Answer

Here is a static method that accepts a desired string length as an argument. It takes a full string of ASCII numbers and letters and loops through the index of your desired string length, randomly choosing an index in the full character string.

public static String generateRandomString(Integer len) {
    final String chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
    String randStr = '';
    while (randStr.length() < len) {
       Integer idx = Math.mod(Math.abs(Crypto.getRandomInteger()), chars.length());
       randStr += chars.substring(idx, idx+1);
    }
    return randStr; 
}

Attribution
Source : Link , Question Author : Justin Helgerson , Answer Author : nkint

Leave a Comment