基于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 尚未实现错误解决办法
Nov 27 Javascript
js 操作符实例代码
Oct 24 Javascript
Jquery下attr和removeAttr的使用方法
Dec 28 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
Javascript 遍历页面text控件详解
Jan 06 Javascript
jQuery链使用指南
Jan 20 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 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生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
详解webpack babel的配置
2018/01/09 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
vue选项卡切换登录方式小案例
2019/09/27 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python框架中flask知识点总结
2018/08/17 Python
pandas 将索引值相加的方法
2018/11/15 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
安全责任协议书
2014/04/21 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
2014年网管工作总结
2014/12/11 职场文书
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers