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 实现TreeView CheckBox全选效果
Jan 11 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
JS简单实现自定义右键菜单实例
May 31 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 Javascript
从零开始实现Vue简单的Toast插件
Dec 03 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
PHP构造函数与析构函数用法示例
2016/09/28 PHP
php连接mysql数据库
2017/03/21 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
Numpy掩码式数组详解
2018/04/17 Python
Python3内置模块random随机方法小结
2019/07/13 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
c++工程师面试问题
2013/08/04 面试题
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
物流仓储计划书
2014/01/10 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
双语教学实施方案
2014/03/23 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
2019大学生实习报告
2019/06/21 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL