简介
UUID(Universally Unique IDentifier) 全局唯一标识符。
UUID是一种由算法生成的二进制长度为128位的数字标识符。UUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f
范围内的一个32位十六进制数。在理想情况下,任何计算机和计算机集群都不会生成两个相同的UUID。
1.第一种
1 | function guid() { |
2 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' .replace(/[xy]/g, function (c) { |
3 | var r = Math.random() * 16 | 0, |
4 | v = c == 'x' ? r : (r & 0x3 | 0x8); |
5 | return v.toString(16); |
6 | }); |
7 | } |
8 | guid() // "a1ca0f7b-51bd-4bf3-a5d5-6a74f6adc1c7" |
2.第二种
01 | function uuid() { |
02 | var s = []; |
03 | var hexDigits = "0123456789abcdef" ; |
04 | for ( var i = 0; i < 36; i++) { |
05 | s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); |
06 | } |
07 | s[14] = "4" ; // bits 12-15 of the time_hi_and_version field to 0010 |
08 | s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 |
09 | s[8] = s[13] = s[18] = s[23] = "-" ; |
10 | |
11 | var uuid = s.join( "" ); |
12 | return uuid; |
13 | } |
14 | uuid() // "ffb7cefd-02cb-4853-8238-c0292cf988d5" |
3.第三种
1 | function guid2() { |
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 | } |
7 | guid2() // "748eea29-f842-4af9-a552-e1e1aa3ed979" |
4.第四种
01 | // 指定长度和基数 |
02 | function uuid2(len, radix) { |
03 | var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' .split( '' ); |
04 | var uuid = [], |
05 | i; |
06 | radix = radix || chars.length; |
07 | |
08 | if (len) { |
09 | // Compact form |
10 | for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; |
11 | } else { |
12 | // rfc4122, version 4 form |
13 | var r; |
14 | |
15 | // rfc4122 requires these characters |
16 | uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' ; |
17 | uuid[14] = '4' ; |
18 | |
19 | // Fill in random data. At i==19 set the high bits of clock sequence as |
20 | // per rfc4122, sec. 4.1.5 |
21 | for (i = 0; i < 36; i++) { |
22 | if (!uuid[i]) { |
23 | r = 0 | Math.random() * 16; |
24 | uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; |
25 | } |
26 | } |
27 | } |
28 | |
29 | return uuid.join( '' ); |
30 | } |
31 | uuid2(16, 16) // "277571702EE33E11" |
5.第五种
说明:生成32位UUID方法
01 | function uuid() { |
02 | var s = []; |
03 | var hexDigits = "0123456789abcdef" ; |
04 | for ( var i = 0; i < 32; i++) { |
05 | s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); |
06 | } |
07 | s[14] = "4" ; // bits 12-15 of the time_hi_and_version field to 0010 |
08 | s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 |
09 | s[8] = s[13] = s[18] = s[23]; |
10 | var uuid = s.join( "" ); |
11 | return uuid; |
12 | } |