基于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 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
Js控制弹窗实现在任意分辨率下居中显示
Aug 01 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
JS实现让访问者自助选择网页文字颜色的方法
Feb 24 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
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提示Failed to write session data错误的解决方法
2014/12/17 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
python中re模块知识点总结
2021/01/17 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
化学教师自荐信范文
2013/12/28 职场文书
七一党建活动方案
2014/01/28 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang