网上的资源大多是sql server和oracle的算法,根据大佬们的方法,用mysql的语法实现了一个:
create function checkCode(cinput VARCHAR(20)) returns varchar(20)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE isum INT default 0;
DECLARE checkTemp INT default 0;
DECLARE coutput VARCHAR(20);
WHILE i <= 17
DO
SET isum = isum + CASE SUBSTR(cinput , i , 1) WHEN '0' THEN 0
WHEN '1' THEN 1
WHEN '2' THEN 2
WHEN '3' THEN 3
WHEN '4' THEN 4
WHEN '5' THEN 5
WHEN '6' THEN 6
WHEN '7' THEN 7
WHEN '8' THEN 8
WHEN '9' THEN 9
WHEN 'A' THEN 10
WHEN 'B' THEN 11
WHEN 'C' THEN 12
WHEN 'D' THEN 13
WHEN 'E' THEN 14
WHEN 'F' THEN 15
WHEN 'G' THEN 16
WHEN 'H' THEN 17
WHEN 'J' THEN 18
WHEN 'K' THEN 19
WHEN 'L' THEN 20
WHEN 'M' THEN 21
WHEN 'N' THEN 22
WHEN 'P' THEN 23
WHEN 'Q' THEN 24
WHEN 'R' THEN 25
WHEN 'T' THEN 26
WHEN 'U' THEN 27
WHEN 'W' THEN 28
WHEN 'X' THEN 29
WHEN 'Y' THEN 30
ELSE 0 END * POWER(3, i - 1) % 31;
SET i = i + 1;
END WHILE;
SET isum = 31 - isum % 31;
SET coutput = CASE isum
WHEN 0 THEN '0'
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
WHEN 5 THEN '5'
WHEN 6 THEN '6'
WHEN 7 THEN '7'
WHEN 8 THEN '8'
WHEN 9 THEN '9'
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
WHEN 16 THEN 'G'
WHEN 17 THEN 'H'
WHEN 18 THEN 'J'
WHEN 19 THEN 'K'
WHEN 20 THEN 'L'
WHEN 21 THEN 'M'
WHEN 22 THEN 'N'
WHEN 23 THEN 'P'
WHEN 24 THEN 'Q'
WHEN 25 THEN 'R'
WHEN 26 THEN 'T'
WHEN 27 THEN 'U'
WHEN 28 THEN 'W'
WHEN 29 THEN 'X'
WHEN 30 THEN 'Y'
WHEN 31 THEN '0'
ELSE '0' END;
RETURN (coutput);
END