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吗?
Feb 24 Javascript
Node.js抓取中文网页乱码问题和解决方法
Feb 10 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
Jquery实时监听input value的实例
Jan 26 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
vue+web端仿微信网页版聊天室功能
Apr 30 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 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
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python中shapefile转换geojson的示例
2019/01/03 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
python 安装移动复制第三方库操作
2020/07/13 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
python 绘制正态曲线的示例
2020/09/24 Python
Django Form常用功能及代码示例
2020/10/13 Python
如何利用Python 进行边缘检测
2020/10/14 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
宿舍卫生检讨书
2014/01/16 职场文书
好学生评语大全
2014/05/05 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
教师考核评语大全
2014/12/31 职场文书
电影建党伟业观后感
2015/06/01 职场文书