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代码
Mar 11 Javascript
js右键菜单效果代码
Jul 21 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
关于onchange事件在IE和FF下的表现及解决方法
Mar 08 Javascript
jquery实现的下拉和收缩效果示例
Aug 21 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
php+mysql实现无限级分类
2015/11/11 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
Seajs的学习笔记
2014/03/04 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
python提取内容关键词的方法
2015/03/16 Python
使用python绘制常用的图表
2016/08/27 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
python实现文本界面网络聊天室
2018/12/12 Python
python实现扫描ip地址的小程序
2019/04/16 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
党校自我鉴定范文
2013/10/02 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
升学宴主持词
2014/04/02 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
Vue h函数的使用详解
2022/02/18 Vue.js