Project

General

Profile

Download (2.23 KB) Statistics
| Branch: | Revision:
1
/*!
2
Math.uuid.js (v1.4)
3
http://www.broofa.com
4
mailto:robert@broofa.com
5

    
6
Copyright (c) 2009 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
Math.uuid = (function() {
35
    // Private array of chars to use
36
    var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); 
37

    
38
    return 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
        } 
46
        else {
47
            // rfc4122, version 4 form
48
            var r;
49

    
50
            // rfc4122 requires these characters
51
            uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
52
            uuid[14] = '4';
53

    
54
            // Fill in random data.    At i==19 set the high bits of clock sequence as
55
            // per rfc4122, sec. 4.1.5
56
            for (i = 0; i < 36; i++) {
57
                if (!uuid[i]) {
58
                    r = 0 | Math.random()*16;
59
                    uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
60
                }
61
            }
62
        }
63

    
64
        return uuid.join('');
65
    };
66
})();
67

    
68
// A more compact, but less performant, RFC4122v4 compliant solution:
69
Math.uuid2 = function() {
70
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
71
                var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
72
                        return v.toString(16);
73
    }).toUpperCase();
74
};
(3-3/3)