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 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
JavaScript 未结束的字符串常量常见解决方法
Jan 24 Javascript
js 中将多个逗号替换为一个逗号的代码
Jun 07 Javascript
JavaScript解析json格式数据简单示例
Dec 09 Javascript
jquery实现点击展开列表同时隐藏其他列表
Aug 10 Javascript
vue.js表格组件开发的实例详解
Oct 12 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
详解Vue中watch的高级用法
May 02 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
javascript实现移动端触屏拖拽功能
Jul 29 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
PHP JSON 数据解析代码
2010/05/26 PHP
php单例模式示例分享
2015/02/12 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
交通事故协议书
2014/04/15 职场文书
班委竞选演讲稿
2014/04/28 职场文书
新兵入伍心得体会
2014/09/04 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript