javascript 实现生成GUID / UUID的多种方法
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的多种方法相关推荐
- linux自动生成mac地址,Linux自动生成MAC地址的多种方法
Linux自动生成MAC地址的多种方法 Linux下生成MAC地址的方法有很多种,除了常见的shell生成法外,还能通过Perl.ruby等方法来生成MAC地址,下面小编对MAC地址的自动生成方法做了 ...
- C++生成GUID的两种方法
C++生成GUID的两种方法 C++生成GUID的两种方法 使用CoCreateGuid函数 使用Boost库 C++生成GUID的两种方法 GUID是软件开发中常用的组件,用于生成唯一的对象,在C# ...
- 生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)
一.在 .NET 中生成 1.直接用.NET Framework 提供的 Guid() 函数,此种方法使用非常广泛.GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的任何两台 ...
- Lua生成Guid(uuid)
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) .GUID是一种由算法生成的二进制长度为 ...
- Javascript生成全局唯一标识符(GUID,UUID)的方法
方法一 function guid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var ...
- javascript随机生成GUID
Math.guid = function(){return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxx'.replace(/[xy]/g, function(c){var ...
- Javascript 获取字符串字节数的多种方法
第一种:(通过String对象的charCodeAt方法) String.prototype.getBytesLength = function() { var length = 0; for(i = ...
- 利用GUID/UUID生成token及验证token的正确性
本来有JWT这种生成token验证的强大工具,但有时考虑到项目的实际需求,会利用GUID/UUID来生成token,当然GUID/UUID能生成很多具有唯一性的验证结果,所以这里主要记录下GUID/U ...
- 利用脚本生成GUID
实际上,可以使用一种非常简单的方法来生成 GUID,但这种方法近乎像是作弊.(您可听清楚了,我们说的可是"近乎".)"Scriptlet.TypeLib"对象的 ...
最新文章
- Swift2.0 中的String(一):常用属性
- php后台开发工具有哪些,热门的 PHP 开发工具都有哪些?
- 关于Visual Basic 10.0
- C++线程同步之事件(生产者与消费者问题)
- 华为智慧屏鸿蒙挂安卓9,荣耀先行!华为智慧屏9月发布:搭鸿蒙系统和自研芯片...
- 第一讲 linux简介
- 优酷java贴吧_[杭州] [优酷] 阿里 Java 服务端开发招人啦-P7\P6+
- register 寄存器变量
- jsp % % ! 区别
- 用C语言实现俄罗斯方块游戏
- python爬千图网高清图片
- 要和文心一言来一把你画我猜吗?
- Tomcat Connector的BIO与NIO模式的比较及区别
- idea指定maven的settings文件不生效
- 纯css3 夜晚天空月亮动画特效(源码公益站)
- onlyoffice 搭建
- 教你用 HTML5 制作Flappy Bird(下)
- Ae 效果快速参考:表达式控制
- js实现记住账号密码——学习笔记
- 夜天之书 #29 Two Hats of Developers