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 相关文章推荐
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 Javascript
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
Javascript数组Array方法解读
Mar 13 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
Jul 06 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
May 01 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目录操作实例代码
2014/02/21 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Python入门篇之对象类型
2014/10/17 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
城市轨道专业个人求职信范文
2013/09/23 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
公司离职证明范本
2014/10/17 职场文书
导游词400字
2015/02/13 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python