Search code examples
javauuid

How to generate unique positive Long using UUID


I have a requirement to generate unique Long ids for my database primary key column.

I thought i can use UUID.randomUUID().getMostSignificantBits() but sometimes its generating some negative long also which is problem for me.

Is it possible to generate only positive long from UUID ?There will be like billions of entries so i want that each generated key must be unique.


Solution

  • UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE
    

    The reason why this works is, when you do bitwise & with 1 it allows the same digit to pass as it is and when you do bitwise & with 0 it blocks it and result is 0. Now, Long.MAX_Value in binary is

    0111111111111111111111111111111111111111111111111111111111111111 
    

    this is 0 followed by 63 1s (total is 64 bits, it's long in java)

    So when you bitwise & a number X with this above number then you will get the same number X except that the leftmost bit is now turned into a zero. Which means you've only changed the sign of that number and not the value.