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 相关文章推荐
js FLASH幻灯片字符串中有连接符&的处理方法
Mar 01 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
Mar 19 Javascript
随窗体滑动的小插件sticky源码
Jun 21 Javascript
利用JS实现浏览器的title闪烁
Jul 08 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
Jul 09 Javascript
JavaScript的Backbone.js框架入门学习指引
May 07 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 jQuery
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
AngularJS日期格式化常见操作实例分析
May 17 Javascript
微信小程序实现自上而下字幕滚动
Jul 14 Javascript
微信小程序登录session的使用
Mar 17 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模板页面中分页代码的解析
2009/02/06 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python模块的制作方法实例分析
2019/12/21 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
女子职高个人自荐书
2014/02/01 职场文书
部队万能检讨书
2014/02/20 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
JavaScript分页组件使用方法详解
2021/07/26 Javascript