Maison > interface Web > js tutoriel > Comment générer des identifiants globalement uniques (GUID, UUID) dans les astuces Javascript_javascript

Comment générer des identifiants globalement uniques (GUID, UUID) dans les astuces Javascript_javascript

WBOY
Libérer: 2016-05-16 15:13:06
original
2199 Les gens l'ont consulté

L'identifiant globalement unique (GUID, Globally Unique Identifier) ​​​​est également appelé UUID (Universally Unique IDentifier).

GUID est un identifiant numérique généré de manière algorithmique avec une longueur binaire de 128 bits. Le format du GUID est « xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx », où x est un nombre hexadécimal à 32 chiffres compris entre 0 et 9 ou a-f. Dans un monde idéal, deux ordinateurs ou clusters d’ordinateurs ne généreront pas le même GUID.

Le nombre total de GUID atteint 2^128 (3,4×10^38), donc la possibilité de générer aléatoirement deux GUID identiques est très faible, mais elle n'est pas 0. Le terme GUID fait parfois spécifiquement référence à la mise en œuvre par Microsoft de la norme UUID.

Lors de la génération de certains nœuds, ils doivent être marqués par des identifiants uniques. Les réponses suivantes les plus votées sont disponibles à titre de référence

.
function generateUUID() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  var r = (d + Math.random()*16)%16 | 0;
  d = Math.floor(d/16);
  return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
};

Copier après la connexion

Commentaires sous la réponse : Le taux de collision avec cette solution est inférieur à 1/2^^122

De plus, je recommande plusieurs algorithmes à tout le monde

Algorithme 2

function guid() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
  });
}
 

Copier après la connexion

Algorithme 3

function guid() {
  function S4() {
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
  }
  return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
 

Copier après la connexion

Algorithme 4

function uuid(len, radix) {
  var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  var uuid = [], i;
  radix = radix || chars.length;
 
  if (len) {
   // Compact form
   for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
  } else {
   // rfc4122, version 4 form
   var r;
 
   // rfc4122 requires these characters
   uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
   uuid[14] = '4';
 
   // Fill in random data. At i==19 set the high bits of clock sequence as
   // per rfc4122, sec. 4.1.5
   for (i = 0; i < 36; i++) {
    if (!uuid[i]) {
     r = 0 | Math.random()*16;
     uuid[i] = chars[(i == 19) &#63; (r & 0x3) | 0x8 : r];
    }
   }
  }
 
  return uuid.join('');
}
Copier après la connexion

Cela peut spécifier la longueur et la base. Par exemple

// 8 character ID (base=2)
uuid(8, 2) // "01001010"
// 8 character ID (base=10)
uuid(8, 10) // "47473046"
// 8 character ID (base=16)
uuid(8, 16) // "098F4D35"

Copier après la connexion

Algorithme 5

function uuid() {
  var s = [];
  var hexDigits = "0123456789abcdef";
  for (var i = 0; i < 36; i++) {
    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  }
  s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  s[8] = s[13] = s[18] = s[23] = "-";
 
  var uuid = s.join("");
  return uuid;
}
 
Copier après la connexion

Bien sûr, je recommande toujours l'algorithme 1. Les amis peuvent choisir en fonction de leurs propres besoins.

É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