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


Posted in Javascript onFebruary 27, 2016

全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。

GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范围内的一个32位十六进制数。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。

GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。

在生成一些节点的时候需要通过唯一ID来标记,有如下高票答案可供参考

function generateUUID() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  var r = (d + Math.random()*16)%16 | 0;
  d = Math.floor(d/16);
  return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
};

答案下面的评论云:这个方案下的碰撞率不及1/2^^122

另外给大家推荐几种算法

算法2

function guid() {
  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);
  });
}

算法3

function guid() {
  function S4() {
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
  }
  return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

算法4

function uuid(len, radix) {
  var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  var uuid = [], i;
  radix = radix || chars.length;
 
  if (len) {
   // Compact form
   for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
  } else {
   // rfc4122, version 4 form
   var r;
 
   // rfc4122 requires these characters
   uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
   uuid[14] = '4';
 
   // Fill in random data. At i==19 set the high bits of clock sequence as
   // per rfc4122, sec. 4.1.5
   for (i = 0; i < 36; i++) {
    if (!uuid[i]) {
     r = 0 | Math.random()*16;
     uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
    }
   }
  }
 
  return uuid.join('');
}

这个可以指定长度和基数。比如

// 8 character ID (base=2)
uuid(8, 2) // "01001010"
// 8 character ID (base=10)
uuid(8, 10) // "47473046"
// 8 character ID (base=16)
uuid(8, 16) // "098F4D35"

算法5

function uuid() {
  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 0010
  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  s[8] = s[13] = s[18] = s[23] = "-";
 
  var uuid = s.join("");
  return uuid;
}

当然了,个人还是推荐算法一的,小伙伴们可以根据自己的需求来进行选择。

Javascript 相关文章推荐
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
深入理解javascript中defer的作用
Dec 11 Javascript
让JavaScript和其它资源并发下载的方法
Oct 16 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
Dec 08 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
解决vue 单文件组件中样式加载问题
Apr 24 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 Javascript
JS原型、原型链深入理解
Feb 27 #Javascript
Javascript中Date类型和Math类型详解
Feb 27 #Javascript
原生javascript实现匀速运动动画效果
Feb 26 #Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 #Javascript
JavaScript代码生成PDF文件的方法
Feb 26 #Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 #Javascript
自动完成的搜索框javascript实现
Feb 26 #Javascript
You might like
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python实现代码统计工具
2019/09/19 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Python decimal模块使用方法详解
2020/06/08 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
航空大学应届生求职信
2013/11/10 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
上党课的心得体会
2014/09/02 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
小时代观后感
2015/06/10 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery