Skip to content

Instantly share code, notes, and snippets.

@SimonHoiberg
Last active June 28, 2024 04:00
Show Gist options
  • Save SimonHoiberg/ad2710c8626c5a74cddd8f6385795cc0 to your computer and use it in GitHub Desktop.
Save SimonHoiberg/ad2710c8626c5a74cddd8f6385795cc0 to your computer and use it in GitHub Desktop.
Create a unique string
const uid = () => {
return Date.now().toString(36) + Math.random().toString(36).substr(2);
};
// Usage. Example, id = khhry2hb7uip12rj2iu
const id = uid();
@MuhammedAlkhudiry
Copy link

Better:

const uid = () => Date.now().toString(36) + Math.random().toString(36).substr(2);

@codeStryke
Copy link

how about using performance.now() instead of Date.now()? It should reduce the probability of collision further.

@SimonHoiberg
Copy link
Author

SimonHoiberg commented Nov 22, 2020

Better:

const uid = () => Date.now().toString(36) + Math.random().toString(36).substr(2);

That's a matter of preference, but yeah 😊

how about using performance.now() instead of Date.now()? It should reduce the probability of collision further.

Even if you're creating thousands of IDs every second, the likelihood of collision is ridiculously low here 😅
But technically speaking, I guess you're right, yeah!

@Eugeno
Copy link

Eugeno commented Nov 22, 2020

Math.random() can behave deterministically: https://www.tomanthony.co.uk/blog/googlebot-javascript-random/
Prefer Crypto API

@SimonHoiberg
Copy link
Author

Math.random() can behave deterministically: https://www.tomanthony.co.uk/blog/googlebot-javascript-random/
Prefer Crypto API

Absolutely. This is well-known.
That's why it is combined with Date.now().

Let me also just state that this is great for smaller lists and for quickly generating temporary unique strings.
It shouldn't be used for more serious cases, where collisions should be taken into account.
In those cases, use uuid4 instead.

@andreasmischke
Copy link

I'm still not sure if I like or dislike that the IDs' alphabetical sort order is also the order by creation time...

@depoulo
Copy link

depoulo commented Nov 24, 2020

You guys sure know about this one? https://gist.github.com/jed/982883

@andreasmischke
Copy link

You guys sure know about this one? https://gist.github.com/jed/982883

Sure, but this here is still nice for smaller use cases and 87% faster on my machine: https://jsbench.me/ovkhvq1uct/1

@fernandocanizo
Copy link

how about using performance.now() instead of Date.now()? It should reduce the probability of collision further.

It will only work on the web, not under Nodejs

@ashleyfrieze
Copy link

Seriously...

https://www.npmjs.com/package/uuid

import { v4 as uuidv4 } from 'uuid';

const myKey = uuidv4();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment