Maison > Article > interface Web > Comment générer des identifiants globalement uniques (GUID, UUID) dans les astuces Javascript_javascript
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) ? (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.