JavaScript生成GUID的多种算法小结


Posted in Javascript onAugust 18, 2013

全局唯一标识符(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标准的实现。

算法1

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;
}

算法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"
Javascript 相关文章推荐
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
jquery构造器的实现代码小结
May 16 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
推荐25个超炫的jQuery网格插件
Nov 28 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
详解jQuery Mobile自定义标签
Jan 06 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
Javascript原生ajax请求代码实例
Feb 20 Javascript
实测jquery data()如何存值
Aug 18 #Javascript
js兼容的placeholder属性详解
Aug 18 #Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
Aug 18 #Javascript
jquery验证表单中的单选与多选实例
Aug 18 #Javascript
JS+CSS实现一个气泡提示框
Aug 18 #Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 #Javascript
js实现动态添加、删除行、onkeyup表格求和示例
Aug 18 #Javascript
You might like
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python输出各行命令详解
2018/02/01 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
毕业生的自我评价分享
2013/12/18 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
趣味游戏活动方案
2014/02/07 职场文书
档案信息化建设方案
2014/05/16 职场文书
竞聘上岗演讲
2014/05/19 职场文书
课程设计的心得体会
2014/09/03 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
小学中队委竞选稿
2015/11/20 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS