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 相关文章推荐
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
Sep 15 Javascript
IE和Firefox下event事件杂谈
Dec 18 Javascript
如何减少浏览器的reflow和repaint
Feb 26 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
AngularJS ng-bind-html 指令详解及实例代码
Jul 30 Javascript
js拖拽功能实现代码解析
Nov 28 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
Vue 之孙组件向爷组件通信的实现
Apr 23 Javascript
解决layUI的页面显示不全的问题
Sep 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php eval函数用法总结
2012/10/31 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python一键去抖音视频水印工具
2018/09/14 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
保险专业大专生求职信
2013/10/26 职场文书
毕业生怎样写好自荐信
2013/11/11 职场文书
军神教学反思
2014/02/04 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
高中教师个人总结
2015/02/10 职场文书
党员评议自我评价
2015/03/03 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python