Js如何生成一个不重复的ID?入门教程_随机数菜鸟教程

先看看下面的几个方法1.生成[0,1)的随机数的Math.random,例如//我这次运行生成的是:0.5834165740043102
Math.random()2.获取当前时间戳Date.now//现在时间戳是1482645606622
Date.now() = 15210093038583.将10进制转换为其他进制的字符串 Number.toStrin

Js如何生成一个不重复的ID?入门教程

先看看下面的几个方法

1.生成[0,1)的随机数的Math.random,例如

//我这次运行生成的是:0.5834165740043102
Math.random()

2.获取当前时间戳Date.now

//现在时间戳是1482645606622
Date.now() = 1521009303858

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

Js如何生成一个不重复的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()
海计划公众号
(0)
上一篇 2020/03/26 23:30
下一篇 2020/03/26 23:30

您可能感兴趣的内容

  • JS 自执行函数小白指南_函数小白教程

    由于自己js基础知识薄弱,很多js的知识还没有掌握,所以接下来会经常写一些关于js基础知识的博客,也算给自己提个醒吧。js自执行函数,听到这个名字,首先会联想到函数。接下来,我来定义一个函数:function aaa(a,b){return sum = a + b
    }定义了一个名为aaa的函数,在里面可以计算两个数的和。如果想执行它,就必须得调用它,并且还得

    2020/03/29
  • iframe父子传参通信入门基础知识_iframe菜鸟知识

    在最近的项目里面,用到了不少关于iframe父子传参通信的相关操作,记录一下,虽然很简单,但是确实十分有用的;iframe通信可以分为2种,跨域和非跨域两种.分别说明;有一点很重要,iframe是可以给name 属性的;给上name 属性可以省下一些代码;非跨域 父调子//父页面

    <i

    2020/03/20
  • Bootstrap CDN库小白攻略由Bootstrap 中文网支持并维护的前端开源项目免费 CDN 服务

    Bootstrap CDN库基础入门 官方网址:http://www.bootcdn.cn/ 简介描述:由Bootstrap 中文网支持并维护的前端开源项目免费 CDN 服务

    2020/03/05
  • node怎么做登录拦截?入门基础_登录小白攻略

    利用 Express 中间件功能实现登录拦截。如果用户请求的路径需要登录后才能访问,将用户重定向到登录页面,登录成功后将用户重定向到原始请求路径。node实现登录拦截的方法如下:设置应用中间件,监控所有请求// app.jsapp.use(function (req, res, next) { if (req.session.user) { // 判断用

    2020/03/22
  • 如何构建网络安全策略?入门基础知识_安全菜鸟教程网

    组织面临着对其信息系统和数据的诸多威胁。了解网络安全的所有基本要素是攻克这些威胁的第一步。网络安全是确保信息的完整性、保密性和可用性(ICA)的实践。它代表了防御和从诸如硬盘驱动器故障或断电等事故中恢复的能力,以及抵御敌人攻击的能力。后者包括从脚本kiddies到黑客和能够执行高级持久威胁(advanced persistent threats, apt)的

    2020/03/26
  • 如何识别程序员编码水平:初级?中级?高级?小白指南_程序员入门教程

    作为开发人员的初、中、高级并不仅仅与拥有多少年的编程经验有关。有时候初级开发人员甚至可能比高级开发人员年龄大。同样,这也这并不意味着高级开发人员必须成为所有人的专家。不过可以肯定地说,高级开发人员比初级和中级开发人员更加熟练。但不仅仅是编码技能使高级开发人员与中级和初级开发人员区别开来。接下来让我们一起来探究一下,究竟可以怎样来判断开发人员的初、中高级?知识

    2020/03/29
  • 函数式响应式编程 – Functional Reactive Programming菜鸟教程_响应式基础教程

    我们略过概念,直接看函数式响应式编程解决了什么问题。故事从下面这个例子展开:两个密码输入框,一个提交按钮。密码、确认密码都填写并一致,允许提交;不一致提示错误。HTML 如下:
    <input id="confirmPwd" placehold

    2020/03/24
  • Tina.js小白知识_一款轻巧的渐进式微信小程序框架

    Tina.js小白知识 官方网址:https://tina.js.org GitHub:https://github.com/tinajs/tina 简介描述:一款轻巧的渐进式微信…

    2020/03/11
  • Linux服务器安装node环境小白知识_服务器菜鸟攻略

    总结在Linux服务器上部署node环境1、下载node因使用的服务器不能直接连接外网,这里就从node官网下载之后再上传,也可以使用wget直接下载,下载版本 2、解压将node上传服务器后,解压到新建的node目录下tar -xf node-v10.15.3-linux-x64.tar.xz3、设置软连接设置nodeln -s /当前的node目录/no

    2020/03/22
  • http中get和post使用攻略_区别基础知识

    HTTP中get和post的区别GET – 从指定的资源请求数据。POST – 向指定的资源提交要被处理的数据GETPOST后退/刷新无害的数据会被重新提交书签可收藏为书签不可收藏为书签缓存能被缓存不能缓存编码类型application多为二进制数据使用多重编码历史会保留参数在历史中不会保存在历史数据中对长度的限制最大为2048无限制对数据类型的限制ASCI

    2020/03/26
  • 如何在前端中使用protobuf(node篇)入门教程_库使用帮助

    解析思路同样是要使用protobuf.js这个库来解析。之前提到,在vue中,为了避免直接使用.proto文件,需要将所有的.proto打包成.js来使用。而在node端,也可以打包成js文件来处理。但node端是服务端环境了,完全可以允许.proto的存在,所以其实我们可以有优雅的使用方式:直接解析。预期效果封装两个基础模块:request.js: 用于根

    2020/03/23
  • CSS选择器:nth-child()和:nth-of-type()的使用菜鸟攻略_选择器小白攻略

    今天就讲一下css选择器:nth-child()和:nth-of-type()的使用。一、:nth-child()和:nth-of-type()的支持度所有主流浏览器均支持:nth-child()和:nth-of-type()选择器,除了 IE8 及更早的版本。二、:nth-child()和:nth-of-type()的一般使用方法1、:nth-child(

    2020/03/24
  • Webstorm常用快捷键基础入门_快捷键基础知识教程

    下面是Webstorm的一些常用快捷键:1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文件。2. ctrl + j: 输出模板3. ctrl + b: 跳到变量申明处4. ctrl + alt + T: 围绕包裹代码(包括zencoding的Wrap with Abbreviation)5. ctrl + []:

    2020/03/26
  • meta标签中的http-equiv属性使用入门教程_标签入门基础知识

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。 meta标签的http-equiv属性语法格式是: 其中http-equ

    2020/03/24
  • 程序员,你想不想进大厂?小白教程_程序员基础知识入门

    “怎么可以进大厂” 这个问题,跟“怎么可以在30岁前赚到1000万” 和 “怎么可以在40岁前赚到一个亿”本质是一样的,不存在一个明确指引,可以指引一个人一定可以成功,如果有这种武功秘籍,我早就发达了!这世上不存在这种武功秘籍,如果有人告诉你有,那一定是割韭菜的了,最好离这种人远远的,小心被割。进大厂的可能性是因人而异的,有些人基础好,能力强,概率会大很多;

    2020/03/26
  • JavaScript面向对象思想及继承(转载)入门基础教程_面向对象作者: abzerolee基础入门

    前言为什么说是再谈呢,网上讲解这个的博客的很多,我开始学习也是看过,敲过就没了,自以为理解了就结束了,书到用时方恨少啊。实际开发中一用就打磕巴,于是在重新学习了之后分享出来。开了这么一个宏观的题目,需要做一下简单说明,这篇文章将会讲解以下几个问题:什么是面向对象编程思想,为什么要用面向对象思想。js中的面向对象思想和其他静态语言相比有什么不同。js中prot

    2020/04/06