验证18位身份证有效性的规则:
1、长度;
2、区划编码;
3、出生日期;
4、最后一位验证;
第一步:对身份证做去空处理;
第二步:对15位身份证号进行验证;
第三步:对18位身份证进行验证;
最后,可根据完成的函数进行测试,如有问题,还请指正,谢谢哦~
CREATE DEFINER=`root`@`localhost` FUNCTION `check_idcard`(sfzh varchar(32)) RETURNS varchar(32) CHARSET utf8
READS SQL DATA
DETERMINISTIC
COMMENT '身份证号校验'
BEGIN
DECLARE v_flag VARCHAR(32) DEFAULT '';
DECLARE v_sum VARCHAR(32) DEFAULT '';
DECLARE v_mod VARCHAR(32) DEFAULT '';
DECLARE i_flag VARCHAR(32) DEFAULT '';
# 去除空格
SET sfzh = REPLACE(sfzh,' ','');
# 长度不等于18或者15为空
IF LENGTH(sfzh) <> 18 THEN
IF LENGTH(sfzh) <> 15 THEN
RETURN '';
END IF;
END IF;
# 判断区划代码前两位
IF SUBSTRING(sfzh,1,2) NOT IN (11,12,13,14,1