📜  uuidv4 javascript - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:35:32.938000             🧑  作者: Mango

随机生成UUIDv4的Javascript和C实现方式

UUID是一个可以唯一标识一个 digital 信息的 identifier,它是一个 128-bit 的数字,通常以 16-bit 十六进制数表示,总共包含了 36 个字符(包含了四个短横线)。UUIDv4 是通常使用的版本,根据高质量的随机数生成,因此更能确保唯一。

Javascript实现

在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 字符串中的每个 xy 用一个随机生成的十六进制数替换,从而生成一个唯一的 UUIDv4。

C实现

在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 都是唯一的。