兩行Javascript代碼生成UUID的方法
GUID全稱(chēng)為全局唯一標(biāo)識(shí)符,也稱(chēng)作 UUID,GUID是一種由算法生成的二進(jìn)制長(zhǎng)度為128位的數(shù)字標(biāo)識(shí)符。GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范圍內(nèi)的一個(gè)32位十六進(jìn)制數(shù)。GUID 的總數(shù)達(dá)到了2^128(3.4×10^38)個(gè),所以隨機(jī)生成兩個(gè)相同GUID的可能性非常小,但并不為0。
發(fā)現(xiàn)一個(gè)簡(jiǎn)單的方法,可以在不依賴(lài)第三方庫(kù)的情況下,在 Javascript 應(yīng)用程序中生成 UUID。
function uuid() {
var temp_url = URL.createObjectURL(new Blob());
var uuid = temp_url.toString(); // blob:https://xxx.com/b250d159-e1b6-4a87-9002-885d90033be3
URL.revokeObjectURL(temp_url);
return uuid.substr(uuid.lastIndexOf("/") + 1);
}
在 Javascript 中可以用的 URL.createObjectURL 方法創(chuàng)建一個(gè)惟一的 URL,以表示傳遞給它的對(duì)象。為了讓這個(gè) URL 是唯一的, URL.createObjectURL 方法返回的 URL 會(huì)帶上一段 36 位長(zhǎng)的字符串,和 UUID 的長(zhǎng)度一致,通過(guò)這個(gè)原理,就可以模擬 UUID 了。
下面是這個(gè)方法生成的 UUID 的一些例子:
for (var i = 0; i < 10; ++i) {
console.log(uuid());
}
// 執(zhí)行結(jié)果如下
// f6ca05c0-fad5-46fc-a237-a8e930e7cb49
// 6a88664e-51e1-48c3-a85e-7bf00467e9e6
// e6050f4c-e86d-4081-9376-099bfbef2c30
// bde3da3c-b318-4498-8a03-9a773afa84bd
// ba0fda03-f806-4c2f-b6f5-1e74a299e603
// 62b2edc3-b09f-4bf9-8dbf-c4d599479a29
// e70c0609-22ad-4493-abcc-0e3445291397
// 920255b2-1838-497d-bc33-56550842b378
// 45559c64-971c-4236-9cfc-706048b60e70
// 4bc4bbb9-1e90-432b-99e8-277b40af92cd
注意: URL.createObjectURL 的目的不是生成隨機(jī) UUID。 因此,上述生成 UUID 的方法可能會(huì)導(dǎo)致我尚未意識(shí)到的副作用。
其他方法
一、生成GUID的方法一
function guid() {
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
二、生成GUID的方法二
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);
});
}
三、生成GUID的方法三
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;
}
參考鏈接:Standalone UUID generator in Javascript
到此這篇關(guān)于兩行Javascript代碼生成UUID的方法的文章就介紹到這了,更多相關(guān)Javascript生成UUID內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java面試常見(jiàn)模式問(wèn)題---代理模式
代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類(lèi)與委托類(lèi)有同樣的接口,代理類(lèi)主要負(fù)責(zé)為委托類(lèi)預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類(lèi),以及事后處理消息2021-06-06
SpringBoot監(jiān)聽(tīng)?wèi)?yīng)用程序啟動(dòng)的生命周期事件的四種方法
在 Spring Boot 中,監(jiān)聽(tīng)?wèi)?yīng)用程序啟動(dòng)的生命周期事件有多種方法,本文給大家就介紹了四種監(jiān)聽(tīng)?wèi)?yīng)用程序啟動(dòng)的生命周期事件的方法,并通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-07-07
SpringBoot 二維碼生成base64并上傳OSS的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot 二維碼生成base64并上傳OSS的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
java 中InputStream,String,File之間的相互轉(zhuǎn)化對(duì)比
這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對(duì)比的相關(guān)資料,需要的朋友可以參考下2017-04-04
Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫(kù)表的底層原理解析
這篇文章主要介紹了Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫(kù)表的底層原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
淺談@mapper引入不到引入的是@MapperScan的問(wèn)題
這篇文章主要介紹了淺談@mapper引入不到引入的是@MapperScan的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Java使用新浪微博API開(kāi)發(fā)微博應(yīng)用的基本方法
這篇文章主要介紹了Java使用新浪微博API開(kāi)發(fā)微博應(yīng)用的基本方法,文中還給出了一個(gè)不使用任何SDK實(shí)現(xiàn)Oauth授權(quán)并實(shí)現(xiàn)簡(jiǎn)單的發(fā)布微博功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-11-11
最流行的java后臺(tái)框架spring quartz定時(shí)任務(wù)
近日項(xiàng)目開(kāi)發(fā)中需要執(zhí)行一些定時(shí)任務(wù),比如需要在每天凌晨時(shí)候,分析一次前一天的日志信息,借此機(jī)會(huì)整理了一下定時(shí)任務(wù)的幾種實(shí)現(xiàn)方式,由于項(xiàng)目采用spring框架,所以我都將結(jié)合spring框架來(lái)介紹2015-12-12

