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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
JavaScript使用RegExp进行正则匹配的方法
Jul 11 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
Oct 23 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Oct 05 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
PHP闭包实例解析
2014/09/08 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
Ajax的概述与实现过程
2016/11/18 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
深入理解Python变量与常量
2016/06/02 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
python 初始化一个定长的数组实例
2019/12/02 Python
Python 音频生成器的实现示例
2019/12/24 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
制衣厂各岗位职责
2013/12/02 职场文书
生日宴会主持词
2014/03/20 职场文书
项目采购员岗位职责
2014/04/15 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
岗位职责范本大全
2015/02/26 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书