DEV Community

Abdurrahman Fadhil
Abdurrahman Fadhil

Posted on • Originally published at rahmanfadhil.com

How to Generate Unique ID in JavaScript

Read the original article here

There are several ways to generate unique identifier in JavaScript. This could very useful in many cases, such as rendering list efficiently, or storing documents or records in database.

Using UUID

UUID is the abbreviation of univerally unique identifier, which is an identification number to uniquely identify something. The main idea of this thing is everytime we generate this numbers, it will be universally unique, which means no one could generate the exact same id as yours.

I personally prefer this approach in any case. In JavaScript, we can use a library called uuid to generate UUID.

$ npm install uuid
Enter fullscreen mode Exit fullscreen mode
const uuidv4 = require("uuid/v4")

uuidv4()
Enter fullscreen mode Exit fullscreen mode

UUID has several versions, but the version that appropriate for generating unique id is version 4. And, that code will generate something like this.

1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed
Enter fullscreen mode Exit fullscreen mode

Using Math.random

Math.random is a JavaScript built-in function which allows us to generate a random number. Which means that everytime we run it, it will return a unique combination of numbers.

Math.floor(Math.random() * 100)
Enter fullscreen mode Exit fullscreen mode

Math.random always returns a decimal number, so we need to rounding off that number first. By multiply it with 100, it will return any number between 0 to 99. You can increase the number if you want to get better result.

Result:

52
Enter fullscreen mode Exit fullscreen mode

Using Date.now

Date.now is another JavaScript built-in function which allows us to get the number of miliseconds elapsed since January 1, 1970.

Date.now()
Enter fullscreen mode Exit fullscreen mode

Result:

1576996323453
Enter fullscreen mode Exit fullscreen mode

Latest comments (31)

Collapse
 
uzomao profile image
uzoma

Date.now works for my simple use case, thank you

Collapse
 
awinooliyo profile image
Erick Otieno Awino • Edited

how about using crypto.randomUUID(), which is part of the Web Crypto API that generates a UUIDv4. I read that it is fast, secure, and simple to use. Here is an example:
const uuid = crypto.randomUUID();
console.log (uuid); // a random and unique ID.

Collapse
 
pfedprog profile image
Pavel Fedotov

The Math.random() static method returns a floating-point, pseudo-random number that's greater than or equal to 0 and less than 1, with approximately uniform distribution over that range — which you can then scale to your desired range. The implementation selects the initial seed to the random number generation algorithm; it cannot be chosen or reset by the user.

developer.mozilla.org/en-US/docs/W...

Collapse
 
ndotie profile image
ndotie

Thanks, this is useful

Collapse
 
sujalshah profile image
Sujal Shah

There is 1 inbuilt method which returns randomUUID
window.crypto.randomUUID()

No 3rd party library, Super fast ⌛

Collapse
 
lpix11 profile image
Mohamed Johnson

For anyone trying out the first example with uuid, it works just fine and the module respects the standards, it just evolved and I guess the post did not 😅.
Anyhow here's the correct implementation

import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

// ... or using CommonJS syntax:
const { v4: uuidv4 } = require('uuid');
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
Enter fullscreen mode Exit fullscreen mode

Feel free to test it out ^^

Collapse
 
guiabc profile image
Gui • Edited

It's my way to generate a 100% guaranted unique and random local id:

var MyLib = {
    //Max id guaranted to be unique will be 999 999 999. 
    //Add more zeros to increase the value.
    lastUid : 100000000, 

    generateUid : function(){
        this.lastUid++;

        //Way to get a random int value betwen min and max: 
        //Math.floor(Math.random() * (max - min) ) + min;
        var randValue = Math.floor(Math.random() * (99999 - 10000)) + 10000;

        return Number(this.lastUid.toString() + randValue);
    }
};

console.log(MyLib.generateUid());
Enter fullscreen mode Exit fullscreen mode
Collapse
 
artemkirichuk profile image
Flashinyourbush

nice! Date.now() good resolve

Collapse
 
roblevintennis profile image
Rob Levin

I was researching this and while I agree uuid package is probably least human error prone, it does mean potentially adding another package.

It seems like utilizing Date.now().toString or perhaps new Date().getTime() or similar and also Math.random could do the trick:

const uid = () =>
  String(
    Date.now().toString(32) +
      Math.random().toString(16)
  ).replace(/\./g, '')
Enter fullscreen mode Exit fullscreen mode

We can test it by adding generated to a map and comparing size:

const size = 1000000
const set = new Set(new Array(size)
  .fill(0)
  .map(() => uid()))

console.log(
  size === set.size ? 'all ids are unique' : `not unique records ${size - set.size}`
)
Enter fullscreen mode Exit fullscreen mode


__

Collapse
 
gregorip02 profile image
Gregori Piñeres

Your script now are in my personal helpers file. thanks.

Image description

Collapse
 
justingolden21 profile image
Justin Golden

This is the best comment here, and with only one like! A perfect small utility and a way to test it, all super intuitive and functional : )

Collapse
 
urielbitton profile image
Uriel Bitton

Math.random does neither generate truly random numbers nor are they unique. Its randomness is of course based on the range you provide and that is its own shortcoming. The other methdos you mentioned are a lot more unique and more random.
Cheers!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.