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 相关文章推荐
Javascript的匿名函数小结
Dec 31 Javascript
Javascript 面向对象 重载
May 13 Javascript
基于jquery的固定表头和列头的代码
May 03 Javascript
解决jquery的datepicker的本地化以及Today问题
May 23 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
Nov 02 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
vue实现菜单切换功能
May 08 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
理解javascript封装
2016/02/23 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Django中的Signal代码详解
2018/02/05 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
利用python 下载bilibili视频
2020/11/13 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
采购部部门职责
2013/12/15 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
一年级班主任感言
2014/03/08 职场文书
个人担保书范文
2014/05/20 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python