Maison  >  Article  >  interface Web  >  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
WBOYoriginal
2016-05-16 15:13:062181parcourir

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

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

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

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('');
}

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"

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

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

Déclaration:
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