基于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类后台管理菜单类-MenuSwitch
Sep 12 Javascript
JavaScript 垃圾回收机制分析
Oct 10 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
3种vue组件的书写形式
Nov 29 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 06 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
vue前端工程的搭建
Mar 31 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP基础知识介绍
2013/09/17 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
java script编程起步(第三课)
2007/01/10 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Python正则表达式经典入门教程
2017/05/22 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python 显示数组全部元素的方法
2018/04/19 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
住房抵押登记委托书
2014/09/27 职场文书
高考升学宴答谢词
2015/01/20 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js