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 相关文章推荐
javascript 年月日联动实现核心代码
Dec 21 Javascript
jQuery+ajax实现动态执行脚本的方法
Jan 27 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
BootStrap 实现各种样式的进度条效果
Dec 07 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
浅谈react 同构之样式直出
Nov 07 Javascript
Bootstrap实现可折叠分组侧边导航菜单
Mar 07 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
详解React之父子组件传递和其它一些要点
Jun 25 Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
实测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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
详解webpack babel的配置
2018/01/09 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
Python定时器实例代码
2017/11/01 Python
我就是这样学习Python中的列表
2019/06/02 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
数据库方面面试题
2012/04/22 面试题
房地产还款计划书
2014/01/10 职场文书
应届生求职信范文
2014/06/30 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
python三子棋游戏
2022/05/04 Python