JavaScript 生成唯一ID的几种方式


Posted in Javascript onFebruary 19, 2021

可行方案

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);

改进版本一:随机数  + toString()

1.随机数版本 

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString()
}

//生成一个类似 0.1283460319177394的ID
GenNonDuplicateID()

2.随机数版本16进制版本

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(16)
}

//函数将生成类似 0.c1615913fa915 的ID
GenNonDuplicateID()

3.随机数版本36进制版本 

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36)
}

//函数将生成类似 0.hefy7uw6ddzwidkwcmxkzkt9 的ID
GenNonDuplicateID()

4.随机数版本36进制版本

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 return Math.random().toString(36).substr(2)
}

//函数将生成类似 8dlv9vabygks2cbg1spds4i 的ID
GenNonDuplicateID()

总结

优势:使用toString的进制转化可以实现更短的字符串表示更多的范围

缺点:用一个随机数作为ID,随着使用次数的累积,必然会出现相同的两个ID

改进版本二

1.引入时间戳 + 36进制版本 

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(2)
 return idStr
}

//函数将生成类似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的ID
GenNonDuplicateID()

2.引入时间戳 + 36进制版本 + 随机数长度控制

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 let idStr = Date.now().toString(36)
 idStr += Math.random().toString(36).substr(2,randomLength)
 return idStr
}

// GenNonDuplicateID(3) 将生成类似 ix49wl2978w 的ID
GenNonDuplicateID(3)

但是,这样生成的ID前面几位总是相同。

3. 引入时间戳 + 随机数前置 36进制 + 随机数长度控制

/**
 * 生成一个用不重复的ID
 */
function GenNonDuplicateID(randomLength){
 return Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36)
}
//GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID
GenNonDuplicateID()

总结

只使用时间戳,有个能在同一时间多人访问生成的是一样的。加上随机数可以实现唯一。再加上自定义长度,使UUID更灵活。

总结

万能方案:

/**
 * 生成一个用不重复的ID
 * @param { Number } randomLength 
 */
function getUuiD(randomLength){
 return Number(Math.random().toString().substr(2,randomLength) + Date.now()).toString(36)
}

以上就是JavaScript 生成唯一ID的几种方式的详细内容,更多关于JavaScript 生成唯一ID的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js网页实时倒计时精确到秒级
Feb 10 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
Vue组件的使用教程详解
Jan 05 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
vue组件之间的数据传递方法详解
Apr 19 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
JavaScript实现打字游戏
Feb 19 #Javascript
JS+CSS实现动态时钟
Feb 19 #Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 #Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 #Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 #Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 #Vue.js
Vue如何实现变量表达式选择器
Feb 18 #Vue.js
You might like
PHP 引用是个坏习惯
2010/03/12 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
javascript 简练的几个函数
2009/08/29 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
Python socket实现简单聊天室
2018/04/01 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
Python并行分布式框架Celery详解
2018/10/15 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
彻底解决Python包下载慢问题
2020/11/15 Python
存储过程的优点有哪些
2012/09/27 面试题
生产副总岗位职责
2013/11/28 职场文书
ktv收银员岗位职责
2013/12/16 职场文书
十佳教师事迹材料
2014/01/11 职场文书
美术教师岗位职责
2014/03/18 职场文书
另类冲刺标语
2014/06/24 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
基于Python实现射击小游戏的制作
2022/04/06 Python