logo hsb.horse
← Voltar para o índice de snippets

Snippets

Polyfill para crypto.randomUUID

Implementação polyfill da função crypto.randomUUID. Como todos os navegadores suportam isso agora, não há necessidade de nova implementação, mas serve como referência para entender o mecanismo UUID v4.

Publicado: Atualizado:

Todos os navegadores agora suportam crypto.randomUUID, então não há necessidade de implementar este polyfill. No entanto, é um bom tópico para entender o mecanismo UUID v4.

Código

type UUID = `${string}-${string}-${string}-${string}-${string}`;
const FN_NAME = "randomUUID";
const BASE_STR = [1e7, 1e3, 4e3, 8e3, 1e11].join("-");
/**
* Gerar UUID v4
* Executa implementação polyfill se o navegador não suportar randomUUID
*/
export function randomUUID(): UUID {
const api = crypto;
if (FN_NAME in api) return api[FN_NAME]();
return BASE_STR.replace(/[018]/g, replacer) as UUID;
}
function replacer(char: string): string {
const random = crypto.getRandomValues(new Uint8Array(1))[0];
const int = Number.parseInt(char);
return (int ^ (random & (15 >> (int / 4)))).toString(16);
}

Como Funciona o UUID v4

UUID v4 é um identificador de 128 bits gerado aleatoriamente. O formato padrão é 8-4-4-4-12, totalizando 36 caracteres (incluindo hífens).

  • xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
  • O 13º caractere é sempre 4 (indica versão)
  • O 17º caractere é 8, 9, a ou b (indica variante)

Explicação da Implementação

BASE_STR se torna o modelo “10000000-1000-4000-8000-100000000000”. A geração de UUID funciona substituindo os caracteres 0, 1 e 8 por valores aleatórios via replace().

crypto.getRandomValues fornece números aleatórios criptograficamente seguros, e operações bit a bit os incorporam em cada posição do UUID.

Notas

  • Use crypto.randomUUID nativo no código de produção
  • Esta implementação é para fins educacionais
  • O desempenho é inferior à implementação nativa