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 相关文章推荐
jQuery实现简单的列表式导航菜单效果代码
Aug 31 Javascript
jquery实现无刷新验证码的简单实例
May 19 Javascript
angular.js分页代码的实例
Jul 27 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
简单理解Vue条件渲染
Dec 03 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
浅谈Postman解决token传参的问题
Mar 31 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 Javascript
JS控制只能输入数字并且最多允许小数点两位
Nov 24 Javascript
js实现滑动进度条效果
Aug 21 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简单的MVC框架实现方法
2015/12/01 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
python dlib人脸识别代码实例
2019/04/04 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python面向对象实现方法总结
2020/08/12 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
商铺门前三包责任书
2014/07/25 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python