GUID(全局唯一标识符)或(UUID)通用唯一标识符是一个 16 字节的二进制值,是旨在提供某些唯一性保证的标识符。

Math.Random

Javascript 中使用 Math.Random() 生成 GUID

 uuidv4: function () {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function (c) {var r = (Math.random() * 16) | 0,v = c == 'x' ? r : (r & 0x3) | 0x8;return v.toString(16);});},

由于上面创建的 GUID 高度依赖Math.Random(),可以创建 GUID 的简单写法,但不能将其视为高质量的随机数生成器。因此,该方法的GUID 可能会发生冲突,但可以用于少量生成。

优化方案:加入日期和时间,确保它是唯一的。

generateUUIDUsingMathRandom: function () {var d = new Date().getTime(); //Timestampvar d2 =(performance && performance.now && performance.now() * 1000) || 0; //Time in microseconds since page-load or 0 if unsupportedreturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function (c) {var r = Math.random() * 16; //random number between 0 and 16if (d > 0) {//Use timestamp until depletedr = (d + r) % 16 | 0;d = Math.floor(d / 16);} else {//Use microseconds since page-load if supportedr = (d2 + r) % 16 | 0;d2 = Math.floor(d2 / 16);}return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);});},

Crypto API

Crypto接口提供当前上下文中可用的基本加密功能。它允许访问加密的强随机数生成器和加密原语。

cryptoUuidv4: function () {return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>(c ^(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));},

Pseudo-Random Number

使用伪随机数

PseudoUUID: function () {var s = [];var hexDigits = '0123456789abcdef';for (var i = 0; i < 36; i++) {s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);}s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01s[8] = s[13] = s[18] = s[23] = '-';var uuid = s.join('');return uuid;},

基于Vue Cli 2.0 模板示例如下:

App.vue

<template><div id="app"><img alt="Vue logo" src="https://vuejs.org/images/logo.png" /><HelloWorld msg="Welcome to Your Vue.js App" /></div>
</template><script>
import HelloWorld from './components/HelloWorld.vue';
import Crypto from 'crypto';export default {name: 'App',components: {HelloWorld,},mounted() {this.init();},methods: {init: function () {const uuid_1 = this.uuidv4();console.log(uuid_1); // 5b3e9636-88ec-4dd7-8ba2-a8e511a36139const uuid_2 = this.generateUUIDUsingMathRandom();console.log(uuid_2); // 41a605ef-1dff-4a69-bece-342104892733const uuid_3 = this.cryptoUuidv4();console.log(uuid_3); // 8db33e79-0a18-4563-95a0-e1b13ba80f68const uuid_4 = this.PseudoUUID();console.log(uuid_4); // 20e44d2b-2e96-4eb1-b457-7d274a497468},//1: Math.random Simpleuuidv4: function () {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function (c) {var r = (Math.random() * 16) | 0,v = c == 'x' ? r : (r & 0x3) | 0x8;return v.toString(16);});},//2: Math.random HighgenerateUUIDUsingMathRandom: function () {var d = new Date().getTime(); //Timestampvar d2 =(performance && performance.now && performance.now() * 1000) || 0; //Time in microseconds since page-load or 0 if unsupportedreturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function (c) {var r = Math.random() * 16; //random number between 0 and 16if (d > 0) {//Use timestamp until depletedr = (d + r) % 16 | 0;d = Math.floor(d / 16);} else {//Use microseconds since page-load if supportedr = (d2 + r) % 16 | 0;d2 = Math.floor(d2 / 16);}return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);});},//3. Crypto APIcryptoUuidv4: function () {return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>(c ^(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));},//4. Pseudo-Random NumberPseudoUUID: function () {var s = [];var hexDigits = '0123456789abcdef';for (var i = 0; i < 36; i++) {s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);}s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01s[8] = s[13] = s[18] = s[23] = '-';var uuid = s.join('');return uuid;},},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

javascript 实现生成GUID / UUID的多种方法相关推荐

  1. linux自动生成mac地址,Linux自动生成MAC地址的多种方法

    Linux自动生成MAC地址的多种方法 Linux下生成MAC地址的方法有很多种,除了常见的shell生成法外,还能通过Perl.ruby等方法来生成MAC地址,下面小编对MAC地址的自动生成方法做了 ...

  2. C++生成GUID的两种方法

    C++生成GUID的两种方法 C++生成GUID的两种方法 使用CoCreateGuid函数 使用Boost库 C++生成GUID的两种方法 GUID是软件开发中常用的组件,用于生成唯一的对象,在C# ...

  3. 生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)

    一.在 .NET 中生成 1.直接用.NET Framework 提供的 Guid() 函数,此种方法使用非常广泛.GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的任何两台 ...

  4. Lua生成Guid(uuid)

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) .GUID是一种由算法生成的二进制长度为 ...

  5. Javascript生成全局唯一标识符(GUID,UUID)的方法

    方法一 function guid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var ...

  6. javascript随机生成GUID

    Math.guid = function(){return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxx'.replace(/[xy]/g, function(c){var ...

  7. Javascript 获取字符串字节数的多种方法

    第一种:(通过String对象的charCodeAt方法) String.prototype.getBytesLength = function() { var length = 0; for(i = ...

  8. 利用GUID/UUID生成token及验证token的正确性

    本来有JWT这种生成token验证的强大工具,但有时考虑到项目的实际需求,会利用GUID/UUID来生成token,当然GUID/UUID能生成很多具有唯一性的验证结果,所以这里主要记录下GUID/U ...

  9. 利用脚本生成GUID

    实际上,可以使用一种非常简单的方法来生成 GUID,但这种方法近乎像是作弊.(您可听清楚了,我们说的可是"近乎".)"Scriptlet.TypeLib"对象的 ...

最新文章

  1. Swift2.0 中的String(一):常用属性
  2. php后台开发工具有哪些,热门的 PHP 开发工具都有哪些?
  3. 关于Visual Basic 10.0
  4. C++线程同步之事件(生产者与消费者问题)
  5. 华为智慧屏鸿蒙挂安卓9,荣耀先行!华为智慧屏9月发布:搭鸿蒙系统和自研芯片...
  6. 第一讲 linux简介
  7. 优酷java贴吧_[杭州] [优酷] 阿里 Java 服务端开发招人啦-P7\P6+
  8. register 寄存器变量
  9. jsp % % ! 区别
  10. 用C语言实现俄罗斯方块游戏
  11. python爬千图网高清图片
  12. 要和文心一言来一把你画我猜吗?
  13. Tomcat Connector的BIO与NIO模式的比较及区别
  14. idea指定maven的settings文件不生效
  15. 纯css3 夜晚天空月亮动画特效(源码公益站)
  16. onlyoffice 搭建
  17. 教你用 HTML5 制作Flappy Bird(下)
  18. Ae 效果快速参考:表达式控制
  19. js实现记住账号密码——学习笔记
  20. 夜天之书 #29 Two Hats of Developers

热门文章

  1. git 分支操作总结
  2. 从sql注入到getshell (内附sqlmap的os-shell遇到中文路径的解决办法)
  3. 一文教你学会使用 th:block
  4. 空间切割(java代码实现)
  5. Cocos2d-x游戏开发之Lua 5.1 参考手册
  6. 《左耳听风》-ARTS-打卡记录-第二十五周
  7. 《python密码学编程》笔记
  8. 统计分析中贝叶斯学派介绍
  9. java非主流火星文输入法_我爱火星文_火星文输入法
  10. java中使用Jedis操作Redis实例