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
hsb.horse