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 相关文章推荐
jQuery实现表格行上移下移和置顶的方法
May 22 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
Jul 27 Javascript
JS提交form表单实例分析
Dec 10 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
微信小程序使用canvas的画图操作示例
Jan 18 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
vue实现滑动到底部加载更多效果
Oct 27 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
Javascript 面试题随笔
2011/03/31 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python复制文件操作实例详解
2015/11/10 Python
python处理xml文件的方法小结
2017/05/02 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
python 实现任务管理清单案例
2020/04/25 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
搞笑获奖感言
2014/01/30 职场文书
学生吸烟检讨书
2014/09/14 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
聘任合同书
2015/09/21 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python