Returns a random v4 UUID of the form
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, where each
x is replaced with a random hexadecimal digit from 0 to f, and
y is replaced with a random hexadecimal digit from 8 to b.
There's also @LeverOne's approach using iteration, which is one byte shorter.
We have been using this in production on the web, and are seeing a lot of collisions with the versions using
Math.randomin certain browsers. If you are using any of these snippets on the web, definitely use one that uses
crypto.getRandomValues! Even if you tested it on your system and did not see any collisions, some other system/browser combination may implement
Math.randomin a way that causes easy collisions.