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 相关文章推荐
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
jQuery简单倒计时效果完整示例
Sep 20 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 Javascript
深入理解Vue router的部分高级用法
Aug 15 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 Javascript
JS中循环遍历数组的四种方式总结
Jan 23 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
全国中波电台频率表
2020/03/11 无线电
PHP与SQL注入攻击[一]
2007/04/17 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
js点击选择文本的方法
2015/02/09 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
nodejs基础应用
2017/02/03 NodeJs
Vue 单文件中的数据传递示例
2017/03/21 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python的id()函数介绍
2013/02/10 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
python之列表推导式的用法
2019/11/29 Python
pytorch的batch normalize使用详解
2020/01/15 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python中return如何写
2020/06/18 Python
写给女生的道歉信
2014/01/08 职场文书
投资意向书范本
2014/04/01 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
停电调休通知
2015/04/16 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript