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. …