JavaScript生成GUID的算法

转载 2014年12月21日 17:58:52

http://www.iteye.com/topic/1134758

全局唯一标识符(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

Js代码  收藏代码
  1. function uuid() {  
  2.     var s = [];  
  3.     var hexDigits = "0123456789abcdef";  
  4.     for (var i = 0; i < 36; i++) {  
  5.         s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);  
  6.     }  
  7.     s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010  
  8.     s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01  
  9.     s[8] = s[13] = s[18] = s[23] = "-";  
  10.    
  11.     var uuid = s.join("");  
  12.     return uuid;  
  13. }  

算法2

Js代码  收藏代码
  1. function guid() {  
  2.     return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {  
  3.         var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);  
  4.         return v.toString(16);  
  5.     });  
  6. }  

算法3

Js代码  收藏代码
  1. function guid() {  
  2.     function S4() {  
  3.        return (((1+Math.random())*0x10000)|0).toString(16).substring(1);  
  4.     }  
  5.     return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());  
  6. }  

 

算法4

Js代码  收藏代码
  1. function uuid(len, radix) {  
  2.     var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');  
  3.     var uuid = [], i;  
  4.     radix = radix || chars.length;  
  5.    
  6.     if (len) {  
  7.       // Compact form  
  8.       for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];  
  9.     } else {  
  10.       // rfc4122, version 4 form  
  11.       var r;  
  12.    
  13.       // rfc4122 requires these characters  
  14.       uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';  
  15.       uuid[14] = '4';  
  16.    
  17.       // Fill in random data.  At i==19 set the high bits of clock sequence as  
  18.       // per rfc4122, sec. 4.1.5  
  19.       for (i = 0; i < 36; i++) {  
  20.         if (!uuid[i]) {  
  21.           r = 0 | Math.random()*16;  
  22.           uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];  
  23.         }  
  24.       }  
  25.     }  
  26.    
  27.     return uuid.join('');  
  28. }  

 

这个可以指定长度和基数。比如

Js代码  收藏代码
  1. // 8 character ID (base=2)  
  2. uuid(8, 2)  //  "01001010"  
  3. // 8 character ID (base=10)  
  4. uuid(8, 10) // "47473046"  
  5. // 8 character ID (base=16)  
  6. uuid(8, 16) // "098F4D35"  

 

相关:

http://www.broofa.com/2008/09/javascript-uuid-function/

http://note19.com/2007/05/27/javascript-guid-generator/

http://www.ietf.org/rfc/rfc4122.txt

http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/873856#873856

游戏服务器里GUID的生成算法

先提供linux下的模拟: #include #include /**   本程序可以生成64位全服务器全局唯一ID   支持每秒4096个注册   由 时间戳+区号+平台号+本地递增序号 ...
  • monster877
  • monster877
  • 2014年04月07日 02:48
  • 2257

JavaScript生成GUID的算法

全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种...
  • shichen2010
  • shichen2010
  • 2016年10月26日 20:15
  • 690

JavaScript生成GUID的算法

全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进制长...
  • cccdf_jjj
  • cccdf_jjj
  • 2017年12月15日 15:26
  • 37

JavaScript生成GUID的算法

全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进...
  • qq_32311977
  • qq_32311977
  • 2015年11月03日 09:43
  • 418

一个UUID生成算法的C语言实现——WIN32版本

一个UUID生成算法的C语言实现——WIN32版本     根据定义,UUID(Universally Unique IDentifier,也称GUID)在时间和空间都是唯一的。为保...
  • u010159842
  • u010159842
  • 2015年11月18日 20:15
  • 1964

前台自动生成GUID

最近做一个拼接页面。页面是不固定的,根据用户的设置和操作展示当前页面的控件和数目。最后保存的时候,会自动校验各个控件的内容是不是符合条件,如果不符合的话,进行锁定和标注,也就是我需要去特定的获取某一个...
  • u010176014
  • u010176014
  • 2016年01月30日 20:12
  • 1113

Oracle中生成GUID类型

Oracle8i引入了SYS_GUID这个概念,它同Oracle管理员所使用的传统的序列(sequence)相比具有诸多优势。一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选...
  • jumtre
  • jumtre
  • 2014年10月31日 16:49
  • 2732

Oracle中自动生成的guid与.Net中的guid的交互

最近在做一个T1的.NET项目,数据库oracle的时候,遇到一个问题。.NET里面的某个数据库表类的某个字段是guid类型。但是用oracle生成的guid。跟.NET的guid 无法识别。导致报...
  • quanvae
  • quanvae
  • 2016年10月24日 14:28
  • 785

jQuery获取建立唯一ID

不要用微秒来产生唯一的ID 自打web开发早期开始,就流行一种产生唯一ID的方法。具体做法是把从1970年1月1日开始计算的微秒数加到你的静态ID后面,如下所示: var myID = "...
  • yuzhongkai
  • yuzhongkai
  • 2016年03月19日 13:52
  • 11699

如何在高并发分布式系统中生成全局唯一Id

又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上。最近还写了一个发邮件的组件以及性能测试会在这个月整理出来,还弄了个MSSQL参数化语法生成器,会在9月整理出来,有兴趣的...
  • itsoftchenfei
  • itsoftchenfei
  • 2013年08月16日 17:16
  • 2425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript生成GUID的算法
举报原因:
原因补充:

(最多只允许输入30个字)