Rumah  >  Artikel  >  hujung hadapan web  >  Kaedah Javascript untuk menjana pengecam unik global (GUID, UUID)_kemahiran javascript

Kaedah Javascript untuk menjana pengecam unik global (GUID, UUID)_kemahiran javascript

WBOY
WBOYasal
2016-05-16 15:13:062158semak imbas

Pengecam unik global (GUID, Pengecam Unik Global) ​​juga dipanggil UUID (Pengecam Unik Sejagat).

GUID ialah pengecam angka yang dijana secara algoritma dengan panjang binari 128 bit. Format GUID ialah "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", dengan x ialah nombor heksadesimal 32 digit dalam julat 0-9 atau a-f. Dalam dunia yang ideal, tiada dua komputer atau kelompok komputer akan menjana GUID yang sama.

Jumlah bilangan GUID mencapai 2^128 (3.4×10^38), jadi kemungkinan menjana dua GUID yang sama secara rawak adalah sangat kecil, tetapi ia bukan 0. Istilah GUID kadangkala merujuk secara khusus kepada pelaksanaan piawaian UUID oleh Microsoft.

Apabila menjana beberapa nod, nod tersebut perlu ditandakan dengan ID unik Jawapan undian teratas berikut tersedia untuk rujukan

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

Komen di bawah jawapan: Kadar perlanggaran di bawah penyelesaian ini adalah kurang daripada 1/2^^122

Selain itu, saya mengesyorkan beberapa algoritma kepada semua orang

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

Algoritma 3

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

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

Ini boleh menentukan panjang dan tapak. Contohnya

// 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"

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

Sudah tentu, saya masih mengesyorkan Algoritma 1. Rakan-rakan boleh memilih mengikut keperluan mereka sendiri.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn