」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Javascript 中產生 UUID:逐步指南

在 Javascript 中產生 UUID:逐步指南

發佈於2024-08-27
瀏覽:298

Generating UUID in Javascript: A Step-by-Step Guide

最初發佈在這裡
如果您曾經試圖在不依賴基於序列或資料庫儲存值的系統中建立唯一標識符,那麼 UUID(通用唯一標識符)就是關鍵。在 JavaScript 領域,UUID 在保護不同系統之間的資料唯一性方面發揮著至關重要的作用。了解 UUID 的複雜性,從其獨特的屬性到其關鍵作用,為探索 JavaScript 中資料全面性和同步的範圍奠定了基礎。

了解UUID的概念

理解 JavaScript 中的 UUID
UUID 代表通用唯一標識符,在 JavaScript 中,它通常用於為資料或物件提供唯一標識。每個 UUID 都是一個 128 位元數字,表示為 36 個字元的字串,例如「123e4567-e89b-12d3-a456–426655440000」。

UUID 被設計為足夠隨機,這確保每個 UUID 與生成的每個其他 UUID 不同,從而提供跨時間和空間的唯一識別碼。

UUID的重要性
在軟體應用程式中,管理唯一身分至關重要,UUID 有助於滿足此需求。它確保系統中的每個元素都有唯一的標識符,保證資料的唯一性。

通常,當資料跨多個系統或資料庫分佈時,UUID 是必需的。在 JavaScript(以及許多其他程式語言)中,它們經常用於在資料庫中設定唯一鍵、為上傳檔案產生隨機檔案名稱、建立身份驗證令牌或任何需要唯一字串的情況等場景。

為什麼 UUID 能夠跨系統保持資料唯一性?
UUID 對於每個系統都是唯一的,並且由於其設計和隨機化過程而在多個系統中保持資料的唯一性。此功能使它們具有很強的可擴展性,是分散式系統的首選,因為系統可以彼此獨立地產生 UUID,同時仍保持唯一性保證。

儘管是隨機生成的,但一個 UUID 與另一個 UUID 衝突的機率非常低,幾乎不可能,確保生成的每個 UUID 保持不同。

UUID 在 JavaScript 或任何程式語言中的應用在維護資料完整性和順序方面發揮重要作用,從而實現更有效率、更健壯的軟體系統。

在 JavaScript 中實作 UUID 生成

理解 JavaScript 中的 UUID
UUID 代表通用唯一識別碼。顧名思義,它用於唯一標識分散式環境中的資訊。在 JavaScript 中,UUID 是一串遵循特定結構的字串,其衝突幾率在統計上可忽略不計,從而使其具有唯一性。

使用‘uuid’庫產生UUID
在 JavaScript 中產生 UUID 最簡單的方法之一是使用「uuid」函式庫。您可以透過在終端機中執行以下命令來透過 npm 安裝「uuid」庫:

npm install uuid

安裝「uuid」後,在 JavaScript 中產生 UUID 很容易。以下是如何執行此操作的範例:

const uuid = require('uuid');
 let uniqueId = uuid.v4(); // Generate a v4 UUID
 console.log(uniqueId);

在上面的例子中,使用了uuid.v4()指令。這裡的「v4」指的是基於隨機數的 UUID 版本 4。當你執行這個程式時,‘uuid’每次都會產生一個唯一的字串。

在沒有任何函式庫的情況下產生 UUID
如果您想在 JavaScript 中產生 UUID 而不使用任何函式庫,您可以利用內建的 Math.random() 函數來實作。具體方法如下:

function generateUUID() {
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);
});
}
console.log(generateUUID());

在上面的程式碼片段中,我們首先使用 UUID 所遵循的結構定義一個字串。然後,我們將格式字串中的每個“x”或“y”替換為十六進位數字。這裡,「y」被替換為集合 [8、9、A 或 B] 中的隨機十六進位數字。 Math.random()函數用來產生隨機數。

您也可以使用 Node.js 中的 crypto 模組產生加密安全的 UUID。

這是一個例子:

const { randomUUID } = require('crypto');
// Generate a UUID
const myUUID = randomUUID();
console.log(myUUID);

這是推薦的方式

Node.js 中的 crypto 模組中的 randomUUID() 函數產生一個基於隨機數的版本 4 UUID。它比使用簡單的隨機數產生器產生 UUID 更安全。

在 JavaScript 中產生 UUID 的旅程為維護資料奇點的多種可能性打開了大門。當您使用“uuid”模組甚至不依賴程式庫時,您已經收集了大量知識並培養了實用技能。由此,您可以確保您的 JavaScript 專案在各個系統中保持資料唯一性,讓您離掌握 JavaScript 流程和系統整合又更近了一步。

版本聲明 本文轉載於:https://dev.to/arsalanmeee/generating-uuid-in-javascript-a-step-by-step-guide-3n6l?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • ## 您可以在不使用 JavaScript 的情況下使用 CSS 建立餅圖分段嗎?
    ## 您可以在不使用 JavaScript 的情況下使用 CSS 建立餅圖分段嗎?
    使用 CSS 在圓中分段使用 border-radius 在 CSS 中建立圓是一種常見的做法。但是,我們可以透過分段(類似餅圖)來實現類似的效果嗎?本文深入研究了僅透過 HTML 和 CSS 實現此目的的方法,不包括使用 JavaScript。 產生相等大小的段相等大小段的一種方法涉及產生以下內容...
    程式設計 發佈於2024-11-06
  • 從頭開始建立一個小型向量存儲
    從頭開始建立一個小型向量存儲
    With the evolving landscape of generative AI, vector databases are playing crucial role in powering generative AI applications. There are so many vect...
    程式設計 發佈於2024-11-06
  • 如何在Chrome使用AI實驗API
    如何在Chrome使用AI實驗API
    要在 Chrome 中使用實驗性 AI API,請依照下列步驟操作: 硬體需求 4GB 記憶體 GPU可用 至少 22GB 空間 Windows 10.11 或 macOS Ventura 或更新版本(無 Linux 規格) 尚不支持: Chrome作業系統 Chrome iOS C...
    程式設計 發佈於2024-11-06
  • 評論:Adam Johnson 的《Boost Your Django DX》
    評論:Adam Johnson 的《Boost Your Django DX》
    書評很微妙。您不想破壞它,但您也想讓潛在讀者體驗所期待的內容。這是提供背景和保持興趣之間的巧妙平衡。我試圖在這篇評論中達到這種平衡,為您提供足夠的內容來吸引您,而不透露太多。 一個小背景故事:我第一次從 Djangonaut Space 的好朋友 Tim 那裡聽說這本書,並將其添加到我的閱讀清單中...
    程式設計 發佈於2024-11-06
  • 如何將陣列元素分組並組合多維數組中另一列的值?
    如何將陣列元素分組並組合多維數組中另一列的值?
    按列將數組元素分組並組合另一列中的值給定一個包含兩列嵌套數組的數組,任務是將基於特定列的子數組,並將每個組中另一列的值連接起來,產生以逗號分隔的清單。 考慮以下範例陣列:$array = [ ["444", "0081"], ["44...
    程式設計 發佈於2024-11-06
  • 三個新加入的例外功能
    三個新加入的例外功能
    從 JDK 7 開始,異常處理已擴展為三個新功能:自動資源管理、多重捕獲和更準確的重新拋出。 多重catch可讓您使用同一個catch子句擷取多個異常,避免程式碼重複。 要使用多重捕獲,請指定由 | 分隔的異常清單。在 catch 子句中。每個參數都是隱式最終參數。 用法範例:catch(f...
    程式設計 發佈於2024-11-06
  • 如何修復執行 ES6 程式碼時出現「意外的令牌匯出」錯誤?
    如何修復執行 ES6 程式碼時出現「意外的令牌匯出」錯誤?
    「排除意外的令牌匯出錯誤」嘗試在專案中執行ES6 程式碼時,可能會出現「意外的令牌導出”錯誤。此錯誤表示所使用的環境不支援 ES6 模組中使用的匯出關鍵字語法。 錯誤詳細資料以下程式碼片段舉例說明了錯誤的來源: export class MyClass { constructor() { ...
    程式設計 發佈於2024-11-06
  • 即使卸載後,VSCode 擴充功能也不會從檔案系統中刪除,我建立了一個解決方案!
    即使卸載後,VSCode 擴充功能也不會從檔案系統中刪除,我建立了一個解決方案!
    所以這是基於 vscode 的編輯器的問題。即使您卸載了擴充功能,它也會保留在檔案系統中,並隨著時間的推移堵塞您的系統。我創建了一個簡單的解決方案。執行此 python 腳本將刪除 vscode 上未安裝的擴充功能。 它適用於 VS Code、VS Code Insiders,也適用於 VSCod...
    程式設計 發佈於2024-11-06
  • 透過 GitHub Actions 按計畫更新網站內容
    透過 GitHub Actions 按計畫更新網站內容
    我想分享我建立一個自我永續的內容管理系統的旅程,該系統不需要傳統意義上的內容資料庫。 問題 該網站的內容(部落格文章和書籤)儲存在 Notion 資料庫中: 附書籤的資料庫 –  Notion UI 我試圖解決的問題是不必在添加每個書籤後手動部署網站。最重要的是 - 保持託管盡可能...
    程式設計 發佈於2024-11-06
  • 如何在 Laravel 5 應用程式的共享託管環境中清除快取?
    如何在 Laravel 5 應用程式的共享託管環境中清除快取?
    如何從 Laravel 5 中的共享託管伺服器清除快取清除快取對於維護 Laravel 應用程式的效能和效率至關重要。但是,在您可能無法存取 CLI 的共享託管環境中,清除快取可能是一個挑戰。 清除視圖快取的解決方法在這種情況下,您可以透過在 CLI 之外呼叫 Artisan 命令來解決此問題。要清...
    程式設計 發佈於2024-11-06
  • 如何加速 Matplotlib 繪圖以提高效能?
    如何加速 Matplotlib 繪圖以提高效能?
    為什麼 Matplotlib 這麼慢? 在評估 Python 繪圖庫時,考慮效能很重要。 Matplotlib 是一個廣泛使用的函式庫,它看起來可能很緩慢,引發了關於加快速度或探索替代選項的問題。讓我們深入研究這個問題並探索可能的解決方案。 提供的範例展示了具有多個子圖和資料更新的圖。使用 Matp...
    程式設計 發佈於2024-11-06
  • 使用畫布調整影像大小時如何克服鋸齒狀邊緣和模糊結果?
    使用畫布調整影像大小時如何克服鋸齒狀邊緣和模糊結果?
    解決在JavaScript 中使用Canvas 調整影像大小時的平滑問題在JavaScript 中使用Canvas 調整影像大小有時會導致明顯的鋸齒狀邊緣或模糊。為了實現平滑的調整大小,可以採用一種稱為向下步進的技術。 在大多數瀏覽器中,預設使用線性內插法來調整大小。雙三次插值可產生更平滑的結果,涉...
    程式設計 發佈於2024-11-06
  • 如何解決 MySQL C# 中的文字編碼問題?
    如何解決 MySQL C# 中的文字編碼問題?
    修復MySQL C# 中的文字編碼問題使用實體框架在C# 中處理MySQL 資料庫時,使用者可能會遇到文字編碼問題,特別是帶有特殊字符,例如“ë”,渲染不正確。本文探討了解決此常見問題的最合適的解決方案。 要修正編碼問題,必須執行以下操作:驗證排序規則設定: 確保所涉及的資料庫或表的排序規則與UTF...
    程式設計 發佈於2024-11-06
  • 如何將美麗搜尋與 Node.js 集成
    如何將美麗搜尋與 Node.js 集成
    作為 Node.js 開發人員,建立能夠提供快速且準確的搜尋結果的應用程式非常重要。使用者期望立即得到相關的回應,但實現起來可能具有挑戰性,特別是在處理大型資料集時。 這就是美麗搜尋的用武之地——一個為輕鬆滿足這些需求而構建的搜尋引擎。 什麼是美麗搜尋? Meilisearch ...
    程式設計 發佈於2024-11-06
  • 平行 JavaScript 機
    平行 JavaScript 機
    作者:Vladas Saulis,PE Prodata,克萊佩達,立陶宛 2024 年 5 月 18 日 抽象的 本文提出了一種新的程式設計模型,可以以簡單且自動平衡的方式利用多核心 CPU 系統。該模型還提出了一種更簡單的程式設計範例,用於在大多數大規模平行計算領域(例如天氣預報、核子物理、搜尋引...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3