基于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 相关文章推荐
js给onclick事件赋值,动态传参数实例解说
Mar 28 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
canvas实现简易的圆环进度条效果
Feb 28 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
vue 自定义 select内置组件
Apr 10 Javascript
深入浅出理解JavaScript闭包的功能与用法
Aug 01 Javascript
爬虫利器Puppeteer实战
Jan 09 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP中读写文件实现代码
2011/10/20 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python切片索引用法示例
2018/05/15 Python
Django框架自定义session处理操作示例
2019/05/27 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
客户代表自我评价范例
2013/09/24 职场文书
市场专员岗位职责
2014/02/14 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
大学生入党群众意见书
2015/06/02 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书