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 相关文章推荐
JavaScript动态调整TextArea高度的代码
Dec 28 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
JS获取URL中的参数数据
Dec 05 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
React事件处理的机制及原理
Dec 03 Javascript
微信小程序开发之左右分栏效果的实例代码
May 20 Javascript
Vue使用localStorage存储数据的方法
May 27 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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 miniBB中文乱码问题解决方法
2008/11/25 PHP
php图片上传类 附调用方法
2016/05/15 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
javaScript基础详解
2017/01/19 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
JS伪继承prototype实现方法示例
2018/06/20 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python简单实现子网掩码转换的方法
2016/04/13 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
利用python如何处理nc数据详解
2018/05/23 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python 基于opencv操作摄像头
2020/12/24 Python
Python运算符+与+=的方法实例
2021/02/18 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
庆八一活动方案
2014/01/25 职场文书
房屋租赁意向书
2014/04/01 职场文书
2014年个人总结范文
2015/03/09 职场文书
春节晚会开场白
2015/05/29 职场文书
生产设备维护保养制度
2015/08/06 职场文书
小学英语新课改心得体会
2016/01/22 职场文书