在mysql中创建函数实现统一社会信用代码的核验

网上的资源大多是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值