JavaScript生成GUID的算法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值