基于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查看html源文件
Nov 08 Javascript
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
基于jquery的让页面控件不可用的实现代码
Apr 27 Javascript
juqery 学习之三 选择器 层级 基本
Nov 25 Javascript
SeaJS入门教程系列之完整示例(三)
Mar 03 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
举例详解JavaScript中Promise的使用
Jun 24 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 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 程式大小
2006/12/06 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
javascript新手语法小结
2008/06/15 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python中global用法实例分析
2015/04/30 Python
Django如何配置mysql数据库
2018/05/04 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python实现图片横向和纵向拼接
2020/03/05 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
python安装后的目录在哪里
2020/06/21 Python
python help函数实例用法
2020/12/06 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
设计师珠宝:Ylang 23
2018/05/11 全球购物
绿色学校实施方案
2014/03/31 职场文书
《开国大典》教学反思
2016/02/16 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
图文详解matlab原始处理图像几何变换
2021/07/09 Python