基于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 相关文章推荐
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
JQuery 设置checkbox值二次无效的解决方法
Jul 22 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
Angular利用HTTP POST下载流文件的步骤记录
Jul 26 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 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中的日期加减方法示例
2014/08/21 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
python 日期操作类代码
2018/05/05 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
大学生思想汇报范文
2013/12/31 职场文书
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
上课睡觉检讨书
2014/01/28 职场文书
小学学校评估方案
2014/06/08 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python