Luhn algorithm can be used on Credit Card number
verification stage.
So, probably, it could be usefull for somebody else.
Here is my implementation:
DELIMITER //
CREATE FUNCTION `LuhnCheck` (CC CHAR(19)) RETURNS BOOLEAN
BEGIN
DECLARE i, mysum, r INT;
DECLARE skip BOOLEAN;
SET skip = TRUE;
SET mysum = 0;
SET i = CHAR_LENGTH(CC);
WHILE i > 0 DO
IF NOT skip THEN
SET r = SUBSTRING(CC, i, 1) * 2;
SET mysum = mysum + IF(r > 9, r - 9, r);
ELSE
SET mysum = mysum + SUBSTRING(CC, i, 1);
END IF;
SET i = i - 1;
SET skip = NOT skip;
END WHILE;
RETURN IF((MOD(mysum, 10) = 0) AND mysum <> 0, TRUE, FALSE);
END;
//
DELIMITER ;
More elegant solutions are welcome.
And here it is implemented with PLT Scheme. …