Maison > interface Web > js tutoriel > Exemple d'implémentation de génération de GUID à l'aide de compétences JavaScript_javascript natives

Exemple d'implémentation de génération de GUID à l'aide de compétences JavaScript_javascript natives

WBOY
Libérer: 2016-05-16 16:37:02
original
1526 Les gens l'ont consulté

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 :

/*
* Fonction : générer un code GUID, où le GUID comprend moins de 14 dates et heures et plus de 18 nombres aléatoires hexadécimaux. Il existe une certaine probabilité de répétition du GUID, mais la probabilité de répétition est théoriquement extrêmement faible. la probabilité est toutes les 10 ms 1/(16^18), c'est-à-dire 1/(16 à la puissance 18), la probabilité de répétition est aussi faible que négligeable*/

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;
}
}
}
Copier après la connexion

Objet GUID

Enregistrez-le simplement dans un fichier JS et référencez-le.

Ensuite, il nous suffit de

 var guid = new GUID();

alert(guid.newGUID());

Vous pouvez obtenir le code GUID.

Le principe de mise en œuvre est très simple. Ici, nous utilisons simplement l'heure système et plus de 18 nombres aléatoires hexadécimaux, et utilisons l'heure système pour convertir 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é.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal