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 validate 验证注册表单实例演示
Mar 25 Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 Javascript
node.js中的fs.readlinkSync方法使用说明
Dec 17 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
Bootstrap每天必学之折叠
Apr 12 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
实测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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
PHP经典面试题集锦
2015/03/19 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP钩子实现方法解析
2019/05/21 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
JS中Location使用详解
2015/05/12 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
原生js实现验证码功能
2017/03/16 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python如何代码集体右移
2020/07/20 Python
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
2014年安全生产目标责任书
2014/07/23 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
使用javascript解析二维码的三种方式
2021/11/11 Javascript