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 相关文章推荐
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
Jan 19 Javascript
Javascript实现倒计时时差效果
May 18 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
vue router-link传参以及参数的使用实例
Nov 10 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
Node.js使用Express.Router的方法
Nov 14 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
Vue自定义多选组件使用详解
Sep 08 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 mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP crc32()函数讲解
2019/02/14 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
js动态引入的四种方法
2018/05/05 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
中文系学生自荐信范文
2013/11/13 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
学校食堂标语
2014/10/06 职场文书
2014年度培训工作总结
2014/11/27 职场文书
写给导师的自荐信
2015/03/06 职场文书
宣传稿格式范文
2015/07/23 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS