Módulo UUID
O módulo uuid fornece funções para geração de identificadores únicos universais (UUIDs) seguindo o padrão RFC 4122. Este módulo é útil para scripts que precisam criar identificadores únicos para rastreamento de transações, identificação de recursos, e casos que requerem unicidade garantida.
Características principais:
-
Geração de UUID versão 4 (aleatório)
-
Formato padrão RFC 4122 (8-4-4-4-12)
-
Garantia de unicidade estatística
-
Thread-safe e seguro para uso concorrente
Formato UUID v4:
-
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx -
Onde
xé qualquer dígito hexadecimal -
4indica versão 4 (aleatório) -
yé 8, 9, A ou B (indicando variante)
Funções Disponíveis
Seção intitulada “Funções Disponíveis”1. uuid.uuid4()
Seção intitulada “1. uuid.uuid4()”Gera um UUID versão 4 (aleatório) no formato padrão RFC 4122.
Parâmetros:
Seção intitulada “Parâmetros:”- Nenhum
Retorno:
Seção intitulada “Retorno:”- string: UUID no formato
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Comportamento:
Seção intitulada “Comportamento:”-
Gera 128 bits aleatórios usando gerador criptograficamente seguro
-
Define os bits de versão para 4 (0100)
-
Define os bits de variante para RFC 4122 (10)
-
Formata como string no padrão 8-4-4-4-12
-
Garante unicidade estatística (probabilidade de colisão extremamente baixa)
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Gerar um UUID simpleslocal id = uuid.uuid4()print("UUID gerado:", id)-- Exemplo: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
-- Gerar múltiplos UUIDslocal ids = {}for i = 1, 5 do ids[i] = uuid.uuid4() print("UUID", i, ":", ids[i])end
-- Usar como identificador de transaçãolocal transacao_id = uuid.uuid4()local log_entry = { id = transacao_id, tipo = "pagamento", valor = 150.75, timestamp = now(), status = "processando"}print("Transação ID:", transacao_id)
-- Criar nomes de arquivo únicoslocal nome_arquivo = "backup_" .. uuid.uuid4() .. ".tar.gz"print("Arquivo de backup:", nome_arquivo)
-- Gerar token de sessãolocal sessao_token = "sess_" .. string.sub(uuid.uuid4(), 1, 8)print("Token de sessão:", sessao_token)Informações Adicionais
Seção intitulada “Informações Adicionais”Unicidade Garantida:
Seção intitulada “Unicidade Garantida:”-- Probabilidade de colisão extremamente baixa-- 2^128 possibilidades ≈ 3.4 × 10^38 UUIDs únicos-- Mesmo gerando 1 bilhão de UUIDs por segundo,-- levaria ~100 anos para ter 50% de chance de colisão
local function testar_unicidade(iteracoes) local uuids = {} local colisoes = 0
for i = 1, iteracoes do local id = uuid.uuid4()
if uuids[id] then colisoes = colisoes + 1 log.error("COLISÃO DETECTADA!", "Iteração:", i, "ID:", id) else uuids[id] = true end end
return { iteracoes = iteracoes, colisoes = colisoes, taxa_colisao = (colisoes / iteracoes) * 100 }end
-- Em testes práticos, colisões são virtualmente inexistentesFormato Padrão:
Seção intitulada “Formato Padrão:”-- UUID sempre no formato RFC 4122local id = uuid.uuid4()-- Formato: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx-- Exemplo: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
-- Validar formatolocal function validar_uuid(uuid_str) local padrao = "^%x%x%x%x%x%x%x%x%-%x%x%x%x%-4%x%x%x%-[89ab]%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$" return string.match(uuid_str:lower(), padrao) ~= nilend
print("UUID válido?", validar_uuid(id)) -- trueprint("UUID válido?", validar_uuid("invalid")) -- falseExemplos de Uso
Seção intitulada “Exemplos de Uso”1. Nomes de Arquivos Temporários:
Seção intitulada “1. Nomes de Arquivos Temporários:”-- Gerar nomes de arquivos únicos para processamentolocal function criar_arquivo_temporario(extensao, dados) local nome_arquivo = "tmp_" .. uuid.uuid4() .. "." .. (extensao or "tmp") local caminho = "/tmp/" .. nome_arquivo
-- Escrever dados local arquivo = io.open(caminho, "w") if arquivo then arquivo:write(dados) arquivo:close()
-- Registrar para limpeza local arquivos_temp, _ = store.get("arquivos_temporarios") or {} table.insert(arquivos_temp, { caminho = caminho, criado_em = now(), expira_em = now() + 3600 -- 1 hora }) store.put("arquivos_temporarios", arquivos_temp)
return caminho else return nil, "Não foi possível criar arquivo" endend
-- Limpar arquivos temporários antigoslocal function limpar_arquivos_temporarios() local arquivos_temp, _ = store.get("arquivos_temporarios") or {} local removidos = 0 local agora = now()
for i = #arquivos_temp, 1, -1 do local arquivo = arquivos_temp[i]
if agora > arquivo.expira_em then -- Tentar remover arquivo local ok, _ = pcall(os.remove, arquivo.caminho) if ok then table.remove(arquivos_temp, i) removidos = removidos + 1 log.debug("Arquivo temporário removido", "Caminho:", arquivo.caminho) end end end
store.put("arquivos_temporarios", arquivos_temp) return removidosend