Gregordy
Gregordy

Reputation: 609

16 bytes length becomes sometimes 15 bytes length

I'm using some code to generate a 16 bytes length String and I noticed a strange behaviour while using my code which is:

public static String generateMyUniqueString() {
    return new BigInteger(64,oRandom).toString(16);
}

This is giving me a nice 16 characters length string 99% of the time.
But yes, sometimes, the generated string is 15 characters length and, for now, I did not find why.

Upvotes: 0

Views: 673

Answers (2)

mukunda
mukunda

Reputation: 2995

Your code reads:

Generate a random secure 64-bit integer and convert it to a hexadecimal string.

When it's converted to a string, leading zeroes are omitted. If you are really lucky you could also get a result with 14 or less digits.

If you want to always have a 16-digit value, you need to add leading zeros manually.

see: https://stackoverflow.com/a/6185386/3264295 for an example how to pad a string

Upvotes: 1

Peter Lawrey
Peter Lawrey

Reputation: 533710

I suggest you try

public static String generateMyUniqueString() {
    return String.format("%016x", new BigInteger(64, oRandom));
}

This will always be 16 digits long as it zero pads the start.

BTW: if you generate 4 billion of these ids there is a 50/50 changes two will be the same.

Have you considered using UUID (128 bit), or a durable counters instead?

Upvotes: 1

Related Questions