uuid.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var UUID = {
  2. createUUID : function(){
  3. var _self = this;
  4. // Loose interpretation of the specification DCE 1.1: Remote Procedure Call
  5. // since JavaScript doesn't allow access to internal systems, the last 48 bits
  6. // of the node section is made up using a series of random numbers (6 octets long).
  7. //
  8. var dg = new Date(1582, 10, 15, 0, 0, 0, 0);
  9. var dc = new Date();
  10. var t = dc.getTime() - dg.getTime();
  11. var tl = _self.getIntegerBits(t,0,31);
  12. var tm = _self.getIntegerBits(t,32,47);
  13. var thv = _self.getIntegerBits(t,48,59) + '1'; // version 1, security version is 2
  14. var csar = _self.getIntegerBits(_self.rand(4095),0,7);
  15. var csl = _self.getIntegerBits(_self.rand(4095),0,7);
  16. // since detection of anything about the machine/browser is far to buggy,
  17. // include some more random numbers here
  18. // if NIC or an IP can be obtained reliably, that should be put in
  19. // here instead.
  20. var n = _self.getIntegerBits(_self.rand(8191),0,7) +
  21. _self.getIntegerBits(_self.rand(8191),8,15) +
  22. _self.getIntegerBits(_self.rand(8191),0,7) +
  23. _self.getIntegerBits(_self.rand(8191),8,15) +
  24. _self.getIntegerBits(_self.rand(8191),0,15); // this last number is two octets long
  25. return tl + tm + thv + csar + csl + n;
  26. },
  27. /**
  28. * 从URL里面获取UUID,然后从LocalStorage里面获取参数
  29. */
  30. getParamFromLocalstorageByUrl : function (){
  31. var uuid = Common.getUuidFromUrl("uuid");
  32. if(uuid != undefined){
  33. var paramString = localStorage.getItem(uuid);
  34. if(paramString != null){
  35. var param = JSON.parse(paramString);
  36. return param;
  37. }
  38. }
  39. },
  40. //Pull out only certain bits from a very large integer, used to get the time
  41. //code information for the first part of a UUID. Will return zero's if there
  42. //aren't enough bits to shift where it needs to.
  43. getIntegerBits : function(val,start,end){
  44. var base16 = this.returnBase(val,16);
  45. var quadArray = new Array();
  46. var quadString = '';
  47. var i = 0;
  48. for(i=0;i<base16.length;i++){
  49. quadArray.push(base16.substring(i,i+1));
  50. }
  51. for(i=Math.floor(start/4);i<=Math.floor(end/4);i++){
  52. if(!quadArray[i] || quadArray[i] == '')
  53. quadString += '0';
  54. else
  55. quadString += quadArray[i];
  56. }
  57. return quadString;
  58. },
  59. //Replaced from the original function to leverage the built in methods in
  60. //JavaScript. Thanks to Robert Kieffer for pointing this one out
  61. returnBase : function(number, base){
  62. return (number).toString(base).toUpperCase();
  63. },
  64. //pick a random number within a range of numbers
  65. //int b rand(int a); where 0 <= b <= a
  66. rand : function(max){
  67. return Math.floor(Math.random() * (max + 1));
  68. },
  69. }