JavaScript 生成唯一ID的几种方式


Posted in Javascript onFebruary 19, 2021

可行方案

1.生成[0,1)的随机数的Math.random

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

2.获取当前时间戳Date.now

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

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);

改进版本一:随机数  + toString()

1.随机数版本 

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

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

2.随机数版本16进制版本

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

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

3.随机数版本36进制版本 

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

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

4.随机数版本36进制版本

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

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

总结

优势:使用toString的进制转化可以实现更短的字符串表示更多的范围

缺点:用一个随机数作为ID,随着使用次数的累积,必然会出现相同的两个ID

改进版本二

1.引入时间戳 + 36进制版本 

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

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

2.引入时间戳 + 36进制版本 + 随机数长度控制

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

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

但是,这样生成的ID前面几位总是相同。

3. 引入时间戳 + 随机数前置 36进制 + 随机数长度控制

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

总结

只使用时间戳,有个能在同一时间多人访问生成的是一样的。加上随机数可以实现唯一。再加上自定义长度,使UUID更灵活。

总结

万能方案:

/**
 * 生成一个用不重复的ID
 * @param { Number } randomLength 
 */
function getUuiD(randomLength){
 return Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36)
}

以上就是JavaScript 生成唯一ID的几种方式的详细内容,更多关于JavaScript 生成唯一ID的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
详细讲解JS节点知识
Jan 31 Javascript
超越Jquery_01_isPlainObject分析与重构
Oct 20 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
Mar 11 Javascript
在jQuery中处理XML数据的大致方法
Aug 14 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
基于vue.js无缝滚动效果
Jan 25 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
JavaScript实现打字游戏
Feb 19 #Javascript
JS+CSS实现动态时钟
Feb 19 #Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 #Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 #Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 #Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 #Vue.js
Vue如何实现变量表达式选择器
Feb 18 #Vue.js
You might like
PHP 变量定义和变量替换的方法
2009/07/30 PHP
定义php常量的详解
2013/06/09 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
什么是JavaScript
2009/08/13 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
JavaScript中的闭包
2016/02/24 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Python实现图片拼接的代码
2018/07/02 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python使用进程Process模块管理资源
2020/03/05 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
C#面试题
2016/05/06 面试题
建筑个人求职信范文
2014/01/25 职场文书
我的祖国演讲稿
2014/05/04 职场文书
应用外语系自荐信
2014/06/26 职场文书
音乐学专业求职信
2014/07/22 职场文书
就业意向书
2014/07/29 职场文书
管理失职检讨书范文
2015/05/05 职场文书