Keine Beschreibung

guid.js 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. //表示全局唯一标识符 (GUID)。
  2. function Guid(g) {
  3. var arr = new Array(); //存放32位数值的数组
  4. if (typeof (g) == "string") { //如果构造函数的参数为字符串
  5. InitByString(arr, g);
  6. }
  7. else {
  8. InitByOther(arr);
  9. }
  10. //返回一个值,该值指示 Guid 的两个实例是否表示同一个值。
  11. this.Equals = function (o) {
  12. if (o && o.IsGuid) {
  13. return this.ToString() == o.ToString();
  14. }
  15. else {
  16. return false;
  17. }
  18. }
  19. //Guid对象的标记
  20. this.IsGuid = function () { }
  21. //返回 Guid 类的此实例值的 String 表示形式。
  22. this.ToString = function (format) {
  23. if (typeof (format) == "string") {
  24. if (format == "N" || format == "D" || format == "B" || format == "P") {
  25. return ToStringWithFormat(arr, format);
  26. }
  27. else {
  28. return ToStringWithFormat(arr, "D");
  29. }
  30. }
  31. else {
  32. return ToStringWithFormat(arr, "D");
  33. }
  34. }
  35. //由字符串加载
  36. function InitByString(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. InitByOther(arr);
  41. }
  42. else {
  43. for (var i = 0; i < g.length; i++) {
  44. arr.push(g[i]);
  45. }
  46. }
  47. }
  48. //由其他类型加载
  49. function InitByOther(arr) {
  50. var i = 32;
  51. while (i--) {
  52. arr.push("0");
  53. }
  54. }
  55. /*
  56. 根据所提供的格式说明符,返回此 Guid 实例值的 String 表示形式。
  57. N 32 位: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  58. D 由连字符分隔的 32 位数字 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  59. B 括在大括号中、由连字符分隔的 32 位数字:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
  60. P 括在圆括号中、由连字符分隔的 32 位数字:(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  61. */
  62. function ToStringWithFormat(arr, format) {
  63. switch (format) {
  64. case "N":
  65. return arr.toString().replace(/,/g, "");
  66. case "D":
  67. var str = arr.slice(0, 8) + "-" + arr.slice(8, 12) + "-" + arr.slice(12, 16) + "-" + arr.slice(16, 20) + "-" + arr.slice(20, 32);
  68. str = str.replace(/,/g, "");
  69. return str;
  70. case "B":
  71. var str = ToStringWithFormat(arr, "D");
  72. str = "{" + str + "}";
  73. return str;
  74. case "P":
  75. var str = ToStringWithFormat(arr, "D");
  76. str = "(" + str + ")";
  77. return str;
  78. default:
  79. return new Guid();
  80. }
  81. }
  82. }
  83. //Guid 类的默认实例,其值保证均为零。
  84. Guid.Empty = new Guid();
  85. //初始化 Guid 类的一个新实例。
  86. Guid.NewGuid = function () {
  87. var g = "";
  88. var i = 32;
  89. while (i--) {
  90. g += Math.floor(Math.random() * 16.0).toString(16);
  91. }
  92. return new Guid(g);
  93. }
  94. function uuid() {
  95. var guid = "";
  96. for (var i = 1; i <= 32; i++) {
  97. var n = Math.floor(Math.random() * 16.0).toString(16);
  98. guid += n;
  99. //if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
  100. // guid += "-";
  101. }
  102. return guid;
  103. }