CREATE FUNCTION randomstring(`size` INT(11) UNSIGNED, `mask` INT(1))
RETURNS VARCHAR(255)
SQL SECURITY INVOKER
BEGIN
DECLARE `no` VARCHAR(10) DEFAULT '0123456789';
DECLARE `uc` VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE `lc` VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE `sc` VARCHAR(12) DEFAULT './!@#$%^&[]';
DECLARE `string` VARCHAR(255) DEFAULT '';
DECLARE `source` VARCHAR(74) DEFAULT '';
# if the size is 0, then just return NULL... i mean, if it's 0 size, then
# what are we doing here?
IF `size` = 0 THEN RETURN NULL; END IF;
IF `mask` = 0 THEN RETURN NULL; END IF;
# use our mask to determine what set of characters we will use to
# generate this random string
IF `mask` >= 8 THEN SET `source` = CONCAT(`source`,`sc`); SET `mask` = `mask` - 8; END IF;
IF `mask` >= 4 THEN SET `source` = CONCAT(`source`,`no`); SET `mask` = `mask` - 4; END IF;
IF `mask` >= 2 THEN SET `source` = CONCAT(`source`,`uc`); SET `mask` = `mask` - 2; END IF;
IF `mask` >= 1 THEN SET `source` = CONCAT(`source`,`lc`); SET `mask` = `mask` - 1; END IF;
IF `size` > 255 THEN SET `size` = 255; END IF;
WHILE LENGTH(`string`) < `size` DO
SET `string` = CONCAT(`string`, SUBSTR(`source`, CAST((RAND()*100) AS UNSIGNED) % LENGTH(`source`),1));
END WHILE;
RETURN `string`;
END