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 .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
javascript包装对象实例分析
Mar 27 Javascript
JQuery复制DOM节点的方法
Jun 11 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
Node.js中常规的文件操作总结
Oct 13 Javascript
微信小程序-获得用户输入内容
Feb 13 Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 Javascript
微信小程序 首页制作简单实例
Apr 07 Javascript
Vue单页及多页应用全局配置404页面实践记录
May 22 Javascript
vue ssr 实现方式(学习笔记)
Jan 18 Javascript
通过JS运行机制的角度说说作用域
Mar 12 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
?生?D片??C字串
2006/12/06 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
react中的ajax封装实例详解
2017/10/17 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python解析xml文件操作实例
2014/10/05 Python
Python三级菜单的实例
2017/09/13 Python
TensorFlow实现创建分类器
2018/02/06 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
房地产员工找工作的自我评价
2013/11/15 职场文书
职专应届生求职信
2013/11/16 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
酒店管理求职信
2014/06/09 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
农业项目合作意向书
2015/05/08 职场文书
开学典礼致辞
2015/07/29 职场文书
车间安全生产管理制度
2015/08/06 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
Python序列化模块JSON与Pickle
2022/06/05 Python