JavaScript生成GUID統一識別符號

admin發表於2017-03-31

GUID是全域性統一識別符號的意思,英文全稱是Globally Unique Identifier。

通常是一串字元和數字混合的字串,並具有一定的格式,用來表示在一定範圍或者領域內它是唯一的標識。

此程式碼在實際應用中並沒有太多的價值,因為實在是很少有應用場景會使用到它,不過感興趣的朋友可以做一下參考,也許會給您帶來一定的啟發效果,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
function GUID() {
  this.date = new Date();
  /* 判斷是否初始化過,如果初始化過以下程式碼,則以下程式碼將不再執行,實際中只執行一次 */
  if (typeof this.newGUID != 'function') {
      
    /* 生成GUID碼 */
    GUID.prototype.newGUID = function() {
      this.date = new Date();
      var guidStr = '';
        sexadecimalDate = this.hexadecimal(this.getGUIDDate(), 16);
        sexadecimalTime = this.hexadecimal(this.getGUIDTime(), 16);
      for (var i = 0; i < 9; i++) {
        guidStr += Math.floor(Math.random()*16).toString(16);
      }
      guidStr += sexadecimalDate;
      guidStr += sexadecimalTime;
      while(guidStr.length < 32) {
        guidStr += Math.floor(Math.random()*16).toString(16);
      }
      return this.formatGUID(guidStr);
    }
  
    /*
     * 功能:獲取當前日期的GUID格式,即8位數的日期:19700101
     * 返回值:返回GUID日期格式的字條串
     */
    GUID.prototype.getGUIDDate = function() {
      return this.date.getFullYear() 
      + this.addZero(this.date.getMonth() + 1) 
          + this.addZero(this.date.getDay());
    }
  
    /*
     * 功能:獲取當前時間的GUID格式,即8位數的時間,包括毫秒,毫秒為2位數:12300933
     * 返回值:返回GUID日期格式的字條串
     */
    GUID.prototype.getGUIDTime = function() {
      return this.addZero(this.date.getHours()) 
      + this.addZero(this.date.getMinutes()) 
          + this.addZero(this.date.getSeconds()) 
          + this.addZero( parseInt(this.date.getMilliseconds() / 10 ));
    }
  
    /*
    * 功能: 為一位數的正整數前面新增0,如果是可以轉成非NaN數字的字串也可以實現
     * 引數: 參數列示準備再前面新增0的數字或可以轉換成數字的字串
     * 返回值: 如果符合條件,返回新增0後的字條串型別,否則返回自身的字串
     */
    GUID.prototype.addZero = function(num) {
      if (Number(num).toString() != 'NaN' && num >= 0 && num < 10) {
        return '0' + Math.floor(num);
      } else {
        return num.toString();
      }
    }
  
    /* 
     * 功能:將y進位制的數值,轉換為x進位制的數值
     * 引數:第1個參數列示欲轉換的數值;第2個參數列示欲轉換的進位制;第3個引數可選,表示當前的進位制數,如不寫則為10
     * 返回值:返回轉換後的字串
     */
    GUID.prototype.hexadecimal = function(num, x, y) {
      if (y != undefined) {
        return parseInt(num.toString(), y).toString(x);
      } else {
        return parseInt(num.toString()).toString(x);
      }
    }
  
    /*
     * 功能:格式化32位的字串為GUID模式的字串
     * 引數:第1個參數列示32位的字串
     * 返回值:標準GUID格式的字串
     */
    GUID.prototype.formatGUID = function(guidStr) {
      var str1 = guidStr.slice(0, 8) + '-',
        str2 = guidStr.slice(8, 12) + '-',
        str3 = guidStr.slice(12, 16) + '-',
        str4 = guidStr.slice(16, 20) + '-',
        str5 = guidStr.slice(20);
      return str1 + str2 + str3 + str4 + str5;
    }
  }
}
var guid = new GUID();
console.log(guid.newGUID())

相關文章