如何在 JavaScript 中创建 GUID/UUID?
全局唯一标识符 (GUID) 或 (通用唯一标识符) UUID 是一个 16 字节或 128 位的二进制值,用作软件构建的标识符标准。这个 128 位数字使用十六进制字符串的规范格式以人类可读的格式表示。一个例子是这样的:de305d84-75c4-431d-acc2-eb6b0e5f6014。在本文中,我们将介绍如何使用 JavaScript 功能生成 GUID 或 UUID。有几种不同的方法,我们将逐一介绍。
使用随机数生成
示例
function generate_uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
function(c) {
var uuid = Math.random() * 16 | 0, v = c == 'x' ? uuid : (uuid & 0x3 | 0x8);
return uuid.toString(16);
});
}
for(var i = 0; i<5; i++) {
console.log( "A sample GUID / UUID: ",generate_uuidv4() );
}
输出
A sample GUID / UUID: 3b869420-6618-43dd-a351-6373ed8ffb48 A sample GUID / UUID: 5d3459b9-d5f1-49ca-a356-d315b314b7eb A sample GUID / UUID: 19d3ea72-24c7-46e8-177c-a052eb9bc677 A sample GUID / UUID: e3f70fb6-951a-4ee1-b3a2-3173bf7e3a91 A sample GUID / UUID: eac986d7-2d1d-40a4-29eb-92eb131bd0cc
在上面的示例中,我们使用随机数生成来生成五个 UUID。由于上述方法依赖于 Math.Random() 函数,因此这对于生成 GUID 或 UUID 来说可能不错,但这并不是高质量的随机数生成器。总是存在两个 UUID 由于相同的随机数而发生冲突的可能性。对 Math.Random() 进行一些调整可以使其成为更可靠的 UUID 或 GUID 生成器。在这种情况下,我们可以将日期和时间与它结合起来。
示例
function generate_uuidv4() {
var dt = new Date().getTime();
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
function( c ) {
var rnd = Math.random() * 16;//random number in range 0 to 16
rnd = (dt + rnd)%16 | 0;
dt = Math.floor(dt/16);
return (c === 'x' ? rnd : (rnd & 0x3 | 0x8)).toString(16);
});
}
for(var i = 0; i<5; i++) {
console.log( "A sample GUID / UUID: ",generate_uuidv4() );
}
输出
A sample GUID / UUID: 7a83193c-9624-48e2-a223-e910878c89c5 A sample GUID / UUID: c8e49a59-16a4-4d22-97fc-cdafffba2707 A sample GUID / UUID: 7feea4a6-59d5-4f0e-b7b7-b5cd2069fa0f A sample GUID / UUID: f244e83c-5af5-483b-8fdd-39d56c6b16ee A sample GUID / UUID: bc2e2167-91d5-4f53-afc3-af9efdc14e56
让我们看看另一种使用伪随机数生成来生成 GUID/UUID 的方法。在这个例子中,生成一个随机的 16 位十六进制字符序列,然后在指定的位置(第 12 到 15 位,设置为 4),(第 6-7 位,放入常量 01。并在适当的位置插入连字符(“-”)以保持正确的格式。
使用伪随机数
示例
function generate_uuidv4() {
var id_str = [];
var hxDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
id_str[i] = hxDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
id_str[14] = "4"; // bits 12-15 is for time_hi_and_version field, set to to 0010
id_str[19] = hxDigits.substr((id_str[19] & 0x3) | 0x8, 1); // bits 6-7 for the clock_seq_hi_and_reserved to 01
id_str[8] = id_str[13] = id_str[18] = id_str[23] = "-";
var guid = id_str.join("");
return guid;
}
for(var i = 0; i<5; i++) {
console.log( "A sample GUID / UUID: ",generate_uuidv4() );
}
输出
A sample GUID / UUID: b5106962-5bc5-46dc-b74e-7a3fd0584fc0 A sample GUID / UUID: 5fdfa0e1-4251-4ae6-bafc-b162e032ab48 A sample GUID / UUID: de644da7-2dc4-499f-82fa-618f5b6f133e A sample GUID / UUID: cc5ce77f-18dd-46ba-8762-1cc7cf9c7a7f A sample GUID / UUID: 1708db50-0d8d-4fcc-8e7e-5cfc23387c6f
让我们看看另一种使用伪随机数生成来生成 GUID/UUID 的方法。这是快速方法,在这种方法中,UUID 字符串通过生成 2 到 15 之间的数字来生成两半。稍后可以进行重新格式化。
示例
function generate_uuidv4() {
return Math.random().toString(36).substring(2, 15) +
Math.random().toString(36).substring(2, 15);
}
for(var i = 0; i<5; i++) {
console.log( "A sample GUID / UUID: ",generate_uuidv4() );
}
输出
A sample GUID / UUID: 8kyxdvlm8by3licwpf081c A sample GUID / UUID: coemu70fbbw9e8gsvvw8aq A sample GUID / UUID: 41kamutwz52izjiw1h769 A sample GUID / UUID: r3e4app5nfsphj3wa7sa8 A sample GUID / UUID: 463olfnw767sr9hy0hlcn
结论
UUID 或 GUID 用作全局标识符标准。它们是具有不同段的 128 位(16 字节)二进制字符串。有许多不同的方法可以通过 JavaScript 生成 UUID/GUID。这里详细描述了基于随机数生成的方法。在第一种方法中,使用了简单的 Math.Random(),但由于此函数可能会创建相同的数字两次,因此使用了 DateTime 参数来为生成更可能不同的新 UUID 集提供盐值。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP