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中将具有数字属性名的对象转换为数组
Mar 06 Javascript
javascript:void(0)使用探讨
Aug 27 Javascript
js清空form表单中的内容示例
May 20 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 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学习笔记 数组遍历实现代码
2011/06/09 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
js实现漫天星星效果
2017/01/19 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
Python迭代器与生成器基本用法分析
2018/07/26 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
交通安全寄语大全
2014/04/08 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js