Warning: unlink(./data/secure/tokens/02c1c5ef014a606e0239cf2d758d10cb8de943eb40b6f8dd375f056468baba6eda289fd8b25b8ee9dc1f400e6852275d0961e159ff02d92049abb805e22b7263.token): No such file or directory in /home/sigesthaxo/snippetvamp/assets/php/class/Helium_secure_class.php on line 865
Warning: filemtime(): stat failed for ./data/secure/tokens/0c26a9fa79afdb13d6698583527269c915c3191a2b3a940fb5265960518909bad59b14bed10cbee62355334ead0d0046d0e785a3138f8e37fc0f44f04e81ff96.token in /home/sigesthaxo/snippetvamp/assets/php/class/Helium_secure_class.php on line 831
Warning: filemtime(): stat failed for ./data/secure/tokens/0e34965991027c02ce2976da3d25aad6793336639121ff59466d84c41e0403139c3cfbb0640d2ee872ba13745394fa8811eb043369023114b7165095a09564bb.token in /home/sigesthaxo/snippetvamp/assets/php/class/Helium_secure_class.php on line 831
Warning: filemtime(): stat failed for ./data/secure/tokens/0f010119149a3c0ed54ef224a8e513c1c0aecf8928805102bf07e71ad49ac0198aeb05e582b09fa446017ab613cc0a60b9979b7133e5519b7dc11f0c6d49b6fd.token in /home/sigesthaxo/snippetvamp/assets/php/class/Helium_secure_class.php on line 831
A custom uuid_v4() function
Here's the function, with comments explaining each group:
CREATE FUNCTION uuid_v4() RETURNS CHAR(36)
BEGIN
-- 1st group is 8 characters = 4 bytes
SET @g1 = HEX(RANDOM_BYTES(4));
-- 2nd group is 4 characters = 2 bytes
SET @g2 = HEX(RANDOM_BYTES(2));
-- 3rd group is 4 characters = 2 bytes, starting with a: 4
SET @g3 = CONCAT('4', SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3));
-- 4th group is 4 characters = 2 bytes, starting with a: 8, 9, A, or B
SET @g4 = CONCAT(HEX(FLOOR(ASCII(RANDOM_BYTES(1)) / 64) + 8), SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3));
-- 1st group is 12 characters = 6 bytes
SET @g5 = HEX(RANDOM_BYTES(6));
RETURN LOWER(CONCAT(@g1, '-', @g2, '-', @g3, '-', @g4, '-', @g5));
END;
Here's a version without variables, to remove any overhead they might add:
CREATE FUNCTION uuid_v4() RETURNS CHAR(36)
BEGIN
RETURN LOWER(CONCAT(
HEX(RANDOM_BYTES(4)),
'-', HEX(RANDOM_BYTES(2)),
'-4', SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3),
'-', HEX(FLOOR(ASCII(RANDOM_BYTES(1)) / 64) + 8), SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3),
'-', hex(RANDOM_BYTES(6))
));
END;
This uses RANDOM_BYTES() instead of RAND() because the former is non-deterministic and therefore more cryptographically secure, resulting in fewer UUID collisions in the end.
RANDOM_BYTES() was introduced in MySQL v5.6.17 (2014) , and is currently not available in MariaDB.