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 相关文章推荐
用ADODB.Stream转换
Jan 22 Javascript
jquery tools 系列 scrollable学习
Sep 06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
vuex学习之Actions的用法详解
Aug 29 Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 Javascript
vue中用 async/await 来处理异步操作
Jul 18 Javascript
js实现扫雷源代码
Nov 27 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
python如何统计代码运行的时长
2019/07/24 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
django中的数据库迁移的实现
2020/03/16 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
简易离婚协议书范本
2014/10/24 职场文书
前台岗位职责
2015/02/13 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android