简单了解uuid
Posted 嘿你的益达
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单了解uuid相关的知识,希望对你有一定的参考价值。
1.含义
UUID-Universally Unique IDentifiers,翻译过来就是“全局唯一标志符”。
UUID到底是什么?
UUID是一个标帜你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。它可以标识DVD驱动器,USB存储设备以及你系统中的硬盘设备等。一个典型的UUID看起来就是这样:
c73a37c8-ef7f-40e4-b9de-8b2f8103844
它是真正的唯一标志符UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的。如果你在系统中添加了新的存储设备如硬盘,很可能会造成一些麻烦,比如说启动的时候因为找不到设备而失败,而使用UUID则不会有这样的问题。
2.构成
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
3.生成
源码:
1 /*! 2 Math.uuid.js (v1.4) 3 http://www.broofa.com 4 mailto:robert@broofa.com 5 6 Copyright (c) 2010 Robert Kieffer 7 Dual licensed under the MIT and GPL licenses. 8 */ 9 10 /* 11 * Generate a random uuid. 12 * 13 * USAGE: Math.uuid(length, radix) 14 * length - the desired number of characters 15 * radix - the number of allowable values for each character. 16 * 17 * EXAMPLES: 18 * // No arguments - returns RFC4122, version 4 ID 19 * >>> Math.uuid() 20 * "92329D39-6F5C-4520-ABFC-AAB64544E172" 21 * 22 * // One argument - returns ID of the specified length 23 * >>> Math.uuid(15) // 15 character ID (default base=62) 24 * "VcydxgltxrVZSTV" 25 * 26 * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62) 27 * >>> Math.uuid(8, 2) // 8 character ID (base=2) 28 * "01001010" 29 * >>> Math.uuid(8, 10) // 8 character ID (base=10) 30 * "47473046" 31 * >>> Math.uuid(8, 16) // 8 character ID (base=16) 32 * "098F4D35" 33 */ 34 (function() { 35 // Private array of chars to use 36 var CHARS = \'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\'.split(\'\'); 37 38 Math.uuid = function (len, radix) { 39 var chars = CHARS, uuid = [], i; 40 radix = radix || chars.length; 41 42 if (len) { 43 // Compact form 44 for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; 45 } else { 46 // rfc4122, version 4 form 47 var r; 48 49 // rfc4122 requires these characters 50 uuid[8] = uuid[13] = uuid[18] = uuid[23] = \'-\'; 51 uuid[14] = \'4\'; 52 53 // Fill in random data. At i==19 set the high bits of clock sequence as 54 // per rfc4122, sec. 4.1.5 55 for (i = 0; i < 36; i++) { 56 if (!uuid[i]) { 57 r = 0 | Math.random()*16; 58 uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; 59 } 60 } 61 } 62 63 return uuid.join(\'\'); 64 }; 65 66 // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance 67 // by minimizing calls to random() 68 Math.uuidFast = function() { 69 var chars = CHARS, uuid = new Array(36), rnd=0, r; 70 for (var i = 0; i < 36; i++) { 71 if (i==8 || i==13 || i==18 || i==23) { 72 uuid[i] = \'-\'; 73 } else if (i==14) { 74 uuid[i] = \'4\'; 75 } else { 76 if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0; 77 r = rnd & 0xf; 78 rnd = rnd >> 4; 79 uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; 80 } 81 } 82 return uuid.join(\'\'); 83 }; 84 85 // A more compact, but less performant, RFC4122v4 solution: 86 Math.uuidCompact = function() { 87 return \'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\'.replace(/[xy]/g, function(c) { 88 var r = Math.random()*16|0, v = c == \'x\' ? r : (r&0x3|0x8); 89 return v.toString(16); 90 }); 91 }; 92 })();
使用:
调用方法:可看js说明
Math.uuid(); 常用的
Math.uuidFast(); 这个不用的话可以删了
Math.uuidCompact(); 这个不用的话可以删了
1 <html> 2 <head> 3 <title>UUID测试</title> 4 <script src="uuid.js"></script> 5 <script src="jquery-1.7.2.min.js"></script> 6 <script> 7 $(function(){ 8 var begin = new Date(); 9 for(var i=0;i<1000;i++){ 10 //Math.uuid(); //运算1000次,47毫秒 11 //Math.uuidFast();//运算1000次,31毫秒 12 //Math.uuidCompact();//运算1000次,78-94毫秒 13 //$("body").append(Math.uuid()+\'<br/>\'); 14 $("body").append(Math.uuid()+\'<br/>\'); 15 } 16 var end = new Date(); 17 alert(end.getTime()-begin.getTime()); //1000个 702毫秒 18 }); 19 </script> 20 </head> 21 <body> 22 UUID测试<br/> 23 </body>
转:http://www.cnblogs.com/zengxinle/archive/2013/04/24/3040843.html
以上是关于简单了解uuid的主要内容,如果未能解决你的问题,请参考以下文章