基于Javascript实现的不重复ID的生成器


Posted in Javascript onDecember 25, 2016

我今天要做的就是做一个不重复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()

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Dec 21 Javascript
参考:关于Javascript中实现暂停的几篇文章
Mar 04 Javascript
15 个 JavaScript Web UI 库
May 19 Javascript
理清apply(),call()的区别和关系
Aug 14 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
详解vee-validate的使用个人小结
Jun 07 Javascript
在Vue环境下利用worker运行interval计时器的步骤
Aug 01 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 #Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 #Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 #Javascript
AngularJS入门教程之Helloworld示例
Dec 25 #Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 #Javascript
AngularJS打开页面隐藏显示表达式用法示例
Dec 25 #Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 #Javascript
You might like
php在线代理转向代码
2012/05/05 PHP
php共享内存段示例分享
2014/01/20 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python实现烟花小程序
2019/01/30 Python
python实现Virginia无密钥解密
2019/03/20 Python
python创建子类的方法分析
2019/11/28 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
详解python破解zip文件密码的方法
2020/01/13 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
元旦晚会邀请函
2014/02/01 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL