All pastes #280736 Raw Edit

kuruption

public text v1 · immutable
#280736 ·published 2006-12-16 03:10 UTC
rendered paste body
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