Published 2022-04-08

Generate Unique OrderId or TransactionId

This unique string can be used for generate OrderId or TransactionId.

Amit Kumar Giri
                                
                                    import java.util.concurrent.TimeUnit;

/**
 * The program to generate random unique string.
 *
 * Created by Amit Kumar Giri on April 08, 2022
 */
public class HelloWorld {

    public static void main (String args[]) {
        long start = System.nanoTime();
        String randomString = generateRandomUniqueString();
        long end = System.nanoTime();
        long diff = (end-start);
        System.out.println("Elapsed Time in NANO seconds: " + diff);
        long seconds = TimeUnit.SECONDS.convert(diff, TimeUnit.NANOSECONDS);
        System.out.println("Elapsed Time in seconds: " + seconds);
        System.out.println(randomString);
    }

    /**
     * This method generates the unique random string efficiently. If you are using any database, takes its
     * primary key column. Here, We will use UNIX Epoch Time + the random string.
     * Suppose you want to generate a random unique string of length 40 chars.
     * Max Size of long: 9223372036854775807
     *
     * @return String
     */
    public static String generateRandomUniqueString () {
        StringBuilder sb = new StringBuilder();
        int stringLenCount = 40;
        long epoch = System.currentTimeMillis();
        int epTimeLen = Long.toString(epoch).length();
        if (epTimeLen < 19) {
            int fillBlank = stringLenCount - epTimeLen - 1; // -1 for underscore
            char[] chars = "abcdefghijklmnopqrstuvwxyz1234567890".toCharArray();
            while (fillBlank > 0) {
                int random = (int) (Math.random() * 1000000000L);
                sb.append(chars[random % chars.length]);
                fillBlank--;
            }
            sb.append("_").append(epoch);
        }
        return sb.toString().toUpperCase();
    }
}