// retoor import "crypto" for Crypto import "strutil" for Str import "bytes" for Bytes class Uuid { static toHex_(bytes) { Str.hexEncode(Bytes.fromList(bytes)) } static v4() { var bytes = Crypto.randomBytes(16) bytes[6] = (bytes[6] & 0x0F) | 0x40 bytes[8] = (bytes[8] & 0x3F) | 0x80 var hex = toHex_(bytes) return hex[0..7] + "-" + hex[8..11] + "-" + hex[12..15] + "-" + hex[16..19] + "-" + hex[20..31] } static isValid(string) { if (!(string is String)) return false if (string.count != 36) return false if (string[8] != "-" || string[13] != "-" || string[18] != "-" || string[23] != "-") return false var hexChars = "0123456789abcdefABCDEF" var positions = [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35] for (pos in positions) { if (!hexChars.contains(string[pos])) return false } return true } static isV4(string) { if (!isValid(string)) return false var version = string[14] if (version != "4") return false var variant = string[19] if (variant != "8" && variant != "9" && variant != "a" && variant != "b" && variant != "A" && variant != "B") return false return true } }