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编程起步(第六课)
Feb 27 Javascript
JavaScript 高级语法介绍
Jun 15 Javascript
图像替换新技术 状态域方法
Jan 28 Javascript
javascript中的作用域scope介绍
Dec 28 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
Oct 08 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
30分钟快速掌握Bootstrap框架
May 24 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
详谈commonjs模块与es6模块的区别
Oct 18 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
Sep 18 Javascript
node使用request请求的方法
Dec 20 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
造型师求职自荐信
2013/09/27 职场文书
商务英语专业自荐信
2013/10/14 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
中学运动会广播稿
2014/01/19 职场文书
财务会计专业求职信
2014/06/09 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
颐和园英文导游词
2015/01/30 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
Golang map映射的用法
2022/04/22 Golang