Heim  >  Artikel  >  Web-Frontend  >  JavaScript-Implementierung zur Generierung von GUID (Global Unified Identifier)_Javascript-Kenntnissen

JavaScript-Implementierung zur Generierung von GUID (Global Unified Identifier)_Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:37:141785Durchsuche

GUID (Globally Unified Identifier) ​​bezieht sich auf eine auf einer Maschine generierte Nummer, die garantiert für alle Maschinen zur gleichen Zeit und am gleichen Ort eindeutig ist. Normalerweise stellt die Plattform eine API zum Generieren einer GUID bereit. Interessant ist der Generierungsalgorithmus, der die Adresse der Ethernet-Karte, die Nanosekundenzeit, die Chip-ID und viele mögliche Zahlen verwendet. Der einzige Nachteil von GUID besteht darin, dass die resultierende Zeichenfolge relativ groß ist.

Das Format der GUID ist: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Jeder weiß, dass GUID in der Front-End-Entwicklung nicht sehr nützlich ist. Wenn Sie jedoch eine ID einfügen müssen und diese ID dem Backend und anderen Vorgängen entspricht, die eine GUID erfordern, können wir der Einfachheit halber trotzdem eine GUID generieren.

Im Allgemeinen ist es sehr einfach, GUIDs in Backend- oder Datenbanksprachen wie SQL, Java, C# usw. zu generieren. Es gibt jedoch keine Möglichkeit, GUIDs direkt im Frontend zu generieren, sodass Sie nur eine schreiben können alleine. Aber weil die GUID die Adresse der Ethernet-Karte sowie die Zeit im Nanosekundenbereich und andere Zahlen erhalten muss. Für das Front-End ist es schwierig, diese Informationen zu erhalten (bitte sagen Sie mir, ob Sie sie wissen), aber wir können GUID simulieren und generieren. Der Code lautet wie folgt:

/*
 * 功能:生成一个GUID码,其中GUID以14个以下的日期时间及18个以上的16进制随机数组成,GUID存在一定的重复概率,但重复概率极低,理论上重复概率为每10ms有1/(16^18),即16的18次方分之1,重复概率低至可忽略不计
 * 免责声明:此代码为作者学习专用,如在使用者在使用过程中因代码问题造成的损失,与作者没有任何关系
 * 日期:2014年9月4日
 * 作者:wyc
 */

 
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;
    }
  }
}

GUID-Objekt

Speichern Sie es einfach in einer JS-Datei und verweisen Sie darauf.

Dann müssen wir es einfach tun.

Code kopieren Der Code lautet wie folgt:

var guid = new GUID();

Alert(guid.newGUID());


Sie können den GUID-Code erhalten.

Das Implementierungsprinzip ist sehr einfach. Hier verwenden wir nur die Systemzeit und mehr als 18 hexadezimale Zufallszahlen. Obwohl eine Wiederholung möglich ist, ist die Wahrscheinlichkeit einer Wiederholung äußerst gering. kann ignoriert werden.

Die obige Methode wurde von mir geschrieben, um GUID zu generieren. Wenn Sie eine bessere Methode haben, sagen Sie mir bitte, danke!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn