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 相关文章推荐
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
$.format,jquery.format 使用说明
Jul 13 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
json定义及jquery操作json的方法
Oct 03 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
Vue.js实现网格列表布局转换方法
Aug 25 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 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类
2006/07/15 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
js不是基础的基础
2006/12/24 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
建龙钢铁面试总结
2014/04/15 面试题
采购部主管岗位职责
2014/01/01 职场文书
买房子个人收入证明
2014/01/16 职场文书
金融事务专业求职信
2014/04/25 职场文书
考试作弊检讨书
2015/01/27 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
人与自然观后感
2015/06/16 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS