基于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 相关文章推荐
另类调用flash无须激活的方法
Dec 27 Javascript
greybox——不开新窗口看新的网页
Feb 20 Javascript
flexigrid 参数说明
Nov 23 Javascript
基于jQuery的计算文本框字数的代码
Jun 06 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
vue绑定class的三种方法
Dec 24 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
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
使用jquery实现轮播图效果
2021/01/02 jQuery
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python使用递归解决全排列数字示例
2014/02/11 Python
python抽取指定url页面的title方法
2018/05/11 Python
Django REST framework视图的用法
2019/01/16 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python怎么对数字进行过滤
2020/07/05 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
工作推荐信范文
2014/05/10 职场文书
软件售后服务承诺书
2014/05/21 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
给领导敬酒词
2015/08/12 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL