Rumah >hujung hadapan web >tutorial js >Kaedah Javascript untuk menjana pengecam unik global (GUID, UUID)_kemahiran javascript
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) ? (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.