JavaScript生成不重复ID的迭代实现方案

作者:闭包旅人

时间:2026-10-24

浏览:174

本文详解JavaScript生成不重复ID的多种实现方式及其迭代过程。从基础的Math.random随机数,到结合Date.now时间戳,再到利用Number.toString进行进制转换,逐步优化ID的唯一性与格式。文章展示了v0.0.1至v0.1.3版本的演进逻辑,包括去除前缀、控制随机长度及混合排序等技巧,帮助开发者根据实际需求选择合适的ID生成策略。

文章目录

JavaScript生成不重复ID的迭代实现方案

本文介绍了几种在JavaScript中生成不重复ID的方法,供读者参考。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID():String{
 
}

首先回顾几个常用的基础方法。

首先是Math.random,用于生成[0,1)之间的随机数,例如:


//我这次运行生成的是:0.5834165740043102
Math.random()

其次是获取当前时间戳的Date.now方法。


//现在时间戳是1482645606622
Date.now() = 1521009303858

3.将10进制转换为其他进制的字符串 Number.toString


//将1482645606622转换成二进制:10101100100110100100100001001000011011110
(1482645606622).toString(2)
//转换成16进制:159349090de MongDB中的ObjectID就是24位16进制数
(1482645606622).toString(16);
//最大进制支持转为36进制,使用字符是0-9a-z :ix48wvry
(1482645606622).toString(36)

接下来,我们来看GenNonDuplicateID函数的自我进化过程。

第一个版本(v0.0.1)仅使用随机数。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString()
}

//生成一个类似 0.1283460319177394的ID
GenNonDuplicateID()

第二个版本(v0.0.2)将随机数转换为16进制格式。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(16)
}

//函数将生成类似 0.c1615913fa915 的ID
GenNonDuplicateID()

第三个版本(v0.0.3)将随机数转换为36进制格式。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36)
}

//函数将生成类似 0.hefy7uw6ddzwidkwcmxkzkt9 的ID
GenNonDuplicateID()

第四个版本(v0.0.4)在36进制基础上,去掉了前缀“0.”。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36).substr(3)
}

//函数将生成类似 8dlv9vabygks2cbg1spds4i 的ID
GenNonDuplicateID()

然而,单纯依赖随机数作为ID,随着使用次数增加,必然会出现重复的情况。

第五个版本(v0.1.1)引入了时间戳,并采用36进制格式。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(3)
 return idStr
}

//函数将生成类似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的ID
GenNonDuplicateID()

第六个版本(v0.1.2)在引入时间戳和36进制的基础上,增加了随机数长度的控制。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(3,randomLength)
 return idStr
}

// GenNonDuplicateID(3) 将生成类似 ix49wl2978w 的ID
GenNonDuplicateID(3)

由于这样生成的ID前几位总是相同,视觉效果不佳,因此继续改进。

第七个版本(v0.1.3)将随机数前置,结合时间戳、36进制以及随机数长度控制。


/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)
}
//GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID
GenNonDuplicateID()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章