1 (function ($) { 2 function guid(g) { 3 var arr = new Array(); //存放32位数值的数组 4 if (typeof (g) == "string") { //如果构造函数的参数为字符串 5 initializeByString(arr, g); 6 } else { 7 initializeByOther(arr); 8 } 9 //返回一个值,该值指示 Guid 的两个实例是否表示同一个值。 10 this.equals = function (o) { 11 if (o && o.isGuid()) { 12 return this.toString() == o.toString(); 13 } 14 else { 15 return false; 16 } 17 } 18 //Guid对象的标记 19 this.isGuid = function () { 20 return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(this); 21 } 22 //返回 Guid 类的此实例值的 String 表示形式。 23 this.toString = function (format) { 24 if (typeof (format) == "string") { 25 if (format == "N" || format == "D" || format == "B" || format == "P") { 26 return toStringWithFormat(arr, format); 27 } else { 28 return toStringWithFormat(arr, "D"); 29 } 30 } 31 else { 32 return toStringWithFormat(arr, "D"); 33 } 34 } 35 //由字符串加载 36 function initializeByString(arr, g) { 37 g = g.replace(/{|(|)|}|-/g, ""); 38 g = g.toLowerCase(); 39 if (g.length != 32 || g.search(/[^0-9,a-f]/i) != -1) { 40 initializeByOther(arr); 41 } else { 42 for (var i = 0; i < g.length; i++) { 43 arr.push(g[i]); 44 } 45 } 46 } 47 //由其他类型加载 48 function initializeByOther(arr) { 49 var i = 32; 50 while (i--) { 51 arr.push("0"); 52 } 53 } 54 /* 55 根据所提供的格式说明符,返回此 Guid 实例值的 String 表示形式。 56 N 32 位: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57 D 由连字符分隔的 32 位数字 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 58 B 括在大括号中、由连字符分隔的 32 位数字:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 59 P 括在圆括号中、由连字符分隔的 32 位数字:(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) 60 */ 61 function toStringWithFormat(arr, format) { 62 switch (format) { 63 case "N": 64 return arr.toString().replace(/,/g, ""); 65 case "D": 66 var str = arr.slice(0, 8) + "-" + arr.slice(8, 12) + "-" + arr.slice(12, 16) + "-" + arr.slice(16, 20) + "-" + arr.slice(20, 32); 67 str = str.replace(/,/g, ""); 68 return str; 69 case "B": 70 var str = toStringWithFormat(arr, "D"); 71 str = "{" + str + "}"; 72 return str; 73 case "P": 74 var str = toStringWithFormat(arr, "D"); 75 str = "(" + str + ")"; 76 return str; 77 default: 78 return new Guid(); 79 } 80 } 81 } 82 $.extend({ guidEx: guid }); 83 $.extend($.guidEx, { 84 enpty: function () { 85 return new guid(); 86 }, 87 newGuid: function () { 88 var g = ""; 89 var i = 32; 90 while (i--) { 91 g += Math.floor(Math.random() * 16.0).toString(16); 92 } 93 return new guid(g); 94 }, 95 isGuid: function (g) { 96 return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(g); 97 } 98 }); 99 })(jQuery);