Maison > Article > interface Web > Implémentation de JavaScript pour générer des compétences GUID (identifiant global unifié)_javascript
GUID (Globally Unified Identifier) fait référence à un numéro généré sur une machine qui est garanti unique pour toutes les machines dans le même temps et dans le même espace. Habituellement, la plateforme fournit une API pour générer le GUID. L'algorithme de génération est intéressant, utilisant l'adresse de la carte Ethernet, le temps en nanosecondes, l'ID de la puce et de nombreux nombres possibles. Le seul inconvénient du GUID est que la chaîne résultante sera relativement grande.
Le format du GUID est : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Tout le monde sait que le GUID n'est pas très utile dans le développement front-end, mais si vous devez insérer un ID et que cet ID correspond au backend et à d'autres opérations qui nécessitent un GUID, nous pouvons toujours générer un GUID pour plus de commodité.
Généralement, il est très simple de générer un GUID dans des langages backend ou de base de données tels que SQL, Java, C#, etc. Cependant, il n'existe aucun moyen de générer directement un GUID sur le front-end, vous ne pouvez donc en écrire qu'un seul. par vous-même. Mais parce que le GUID doit obtenir l’adresse de la carte Ethernet, ainsi que le temps au niveau de la nanoseconde et d’autres chiffres. Il est difficile pour le front-end d'obtenir cette information (merci de me dire si vous la connaissez), mais nous pouvons simuler et générer du GUID, le code est le suivant :
/* * 功能:生成一个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; } } }
Objet GUID
Enregistrez-le simplement dans un fichier JS et référencez-le.
Alors il nous suffit de le faire.
alert(guid.newGUID());
Le principe de mise en œuvre est très simple. Ici, nous utilisons simplement l'heure du système et plus de 18 nombres aléatoires hexadécimaux, et convertissons l'heure du système en hexadécimal. Bien qu'il soit toujours possible de répéter, la probabilité de répétition est extrêmement faible. peut être ignoré.
La méthode ci-dessus est écrite par moi pour générer du GUID. Si vous avez une meilleure méthode, dites-le-moi, merci !