JS如何生成一个不重复的ID的函数


Posted in Javascript onDecember 25, 2016

在MongoDB中的ObjectID,可以理解为是一个不会重复的ID,这里有个链接https://3water.com/article/101164.htm感兴趣可以去研究一下。

我今天要做的就是做一个不重复ID的生成器

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID():String{
 
}
先看看下面的几个方法
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)
GenNonDuplicateID的自我进化
1.随机数版本 v0.0.1
/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString()
}

//生成一个类似 0.1283460319177394的ID
GenNonDuplicateID()

2.随机数版本16进制版本 v0.0.2

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(16)
}
//函数将生成类似 0.c1615913fa915 的ID
GenNonDuplicateID()

3.随机数版本36进制版本 v0.0.3

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36)
}
//函数将生成类似 0.hefy7uw6ddzwidkwcmxkzkt9 的ID
GenNonDuplicateID()

4.随机数版本36进制版本 去掉"0." v0.0.4

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36).substr(3)
}
//函数将生成类似 8dlv9vabygks2cbg1spds4i 的ID
GenNonDuplicateID()

然而用一个随机数作为ID,随着使用次数的累积,必然会出现相同的两个ID

5.引入时间戳 的36微进制版本 v0.1.1

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(3)
 return idStr
}
//函数将生成类似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的ID
GenNonDuplicateID()

6.引入时间戳 的36微进制版本 加入随机数长度控制 v0.1.2

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(3,randomLength)
 return idStr
}
// GenNonDuplicateID(3) 将生成类似 ix49wl2978w 的ID
GenNonDuplicateID(3)

这样生成的ID前面几位总是相同,看着不爽,于是再改改

7. 引入时间戳 随机数前置 36进制 加入随机数长度控制 v0.1.3

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)
}
//GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID
GenNonDuplicateID()

以上所述是小编给大家介绍的JS如何生成一个不重复的ID的函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用js获取QueryString的方法小结
Feb 28 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
最短的IE判断代码
Mar 13 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
Bootstrap使用基础教程详解
Sep 05 Javascript
js方法数据验证的简单实例
Sep 17 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
Javascript读取上传文件内容/类型/字节数
Apr 30 Javascript
VUE兄弟组件传值操作实例分析
Oct 26 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
May 13 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 #Javascript
ES6概念 Symbol toString()方法
Dec 25 #Javascript
ES6概念 Symbol.keyFor()方法
Dec 25 #Javascript
ES6概念 ymbol.for()方法
Dec 25 #Javascript
ES2015 Symbol 一种绝不重复的值
Dec 25 #Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 #Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 #Javascript
You might like
PHP安装攻略:常见问题解答(二)
2006/10/09 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
jQuery使用手册之一
2007/03/24 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
js简易版购物车功能
2017/06/17 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python函数装饰器用法实例详解
2015/06/04 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
如何理解Python中的变量
2020/06/01 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
EJB timer的种类
2014/10/28 面试题
擅自离岗检讨书
2014/02/11 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
表扬信范文
2015/05/04 职场文书
导游词之山东孔庙
2019/11/04 职场文书
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js