1404. Problem - Random ID
Random ID


Implement a random id generator.

1. Requirement

Implement an ID generator, which can generate random unique id. You are able to specify the length of the IDs.

  • ID should be human-readable, short but unique.
  • Ideally should be 5 or 6 chars long.
  • Scalable.

2. Solution

Total characters = 10 numbers + 26 upper case letters + 26 lower case letters. Randomly pickup characters within these 62 letters for the given length.

public class RandomIdGenerator {
    private static char[] base62chars =
            "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();

    private static Random random = new Random();

    public static String GetBase62(int length)
    {
        StringBuilder sb = new StringBuilder(length);

        for (int i = 0; i < length; i++)
            sb.append(base62chars[random.nextInt(62)]);

        return sb.toString();
    }

    public static String GetBase36(int length)
    {
        StringBuilder sb = new StringBuilder(length);

        for (int i=0; i < length; i++)
            sb.append(base62chars[random.nextInt(36)]);

        return sb.toString();
    }
}

Test Class.

public class RandomIdGeneratorTest {
    @Test
    public void testRandomIdGenerator() {
        System.out.println("testRandomIdGenerator");

        // Create 5 IDs with length of 6, base62
        System.out.println("Create 5 IDs with length of 6, base62");
        for (int i = 0; i < 5; i++) {
            String base62ID = RandomIdGenerator.GetBase62(6);
            System.out.println(base62ID);
            assertEquals(6, base62ID.length());
        }

        System.out.println();

        // Create 5 IDs with length of 8, base36
        System.out.println("Create 5 IDs with length of 8, base36");
        for (int i = 0; i < 5; i++) {
            String base36ID = RandomIdGenerator.GetBase36(8);
            System.out.println(base36ID);
            assertEquals(8, base36ID.length());
        }
    }
}

Output.

Create 5 IDs with length of 6, base62
S3oss6
5tTbvF
FQ0282
7Zvv8U
qx7xni

Create 5 IDs with length of 8, base36
PYO7W1RM
ASSXF1UI
GI6STYE9
81BQJKR8
M5QDTUMM

3. Source Files

4. References