📅  最后修改于: 2023-12-03 15:35:32.938000             🧑  作者: Mango
UUID是一个可以唯一标识一个 digital 信息的 identifier,它是一个 128-bit 的数字,通常以 16-bit 十六进制数表示,总共包含了 36 个字符(包含了四个短横线)。UUIDv4 是通常使用的版本,根据高质量的随机数生成,因此更能确保唯一。
在Javascript中,我们可以使用 uuid
库来生成UUIDv4。
const { v4: uuidv4 } = require('uuid');
console.log(uuidv4());
或者我们可以使用纯 Javascript 的实现方式:
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;
}
console.log(generateUUID());
这种实现方式使用了一个 replace()
函数,它把 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
字符串中的每个 x
或 y
用一个随机生成的十六进制数替换,从而生成一个唯一的 UUIDv4。
在C语言中,我们需要实现一个能够生成随机数的函数来完成UUIDv4的生成。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
char *uuidv4(void) {
char *uuid = (char*) malloc(37 * sizeof(char));
sprintf(uuid, "%04x%04x-%04x-%04x-%04x-%04x%04x%04x",
rand() & 0xffff, rand() & 0xffff,
rand() & 0xffff,
(rand() & 0x0fff) | 0x4000,
rand() % 0x3fff + 0x8000,
rand() & 0xffff, rand() & 0xffff, rand() & 0xffff);
return uuid;
}
int main() {
srand(time(NULL));
char *uuid = uuidv4();
printf("%s\n", uuid);
free(uuid);
return 0;
}
这段C语言代码通过调用 srand(time(NULL))
来初始化随机数生成器,然后调用 rand()
得到一个 0 到 RAND_MAX 之间的随机数。我们使用 sprintf()
函数将这些随机数格式化成 UUIDv4 的格式并返回。注意,我们需要在每个 UUIDv4 末尾添加一个 \0
字符。
UUIDv4 是一种强大的标识符,它可以确保生成的值在很大程度上是唯一的。在Javascript和C语言中,我们都可以使用不同的方式生成 UUIDv4,但它们都需要一个可靠的随机数生成器来确保每个 UUIDv4 都是唯一的。