mysql 检查一个字符串是不是身份证号

CREATE DEFINER=`root`@`%` FUNCTION `f_base_check_id_number`(number VARCHAR(20)CHARSET utf8) RETURNS tinyint(1)
BEGIN
    DECLARE flag BOOL DEFAULT FALSE;
    IF (LENGTH(number)=18 
    AND number REGEXP CONCAT('^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([1][0-4])|([6][1-6])|([7][1])|([8][1-2]))', -- 1、2位
    '(([0][0-9])|([1][0-9])|([2][0-9])|([3][0-9])|([4][0-3])|([5][1-3])|([8][2])|([9][0]|[1]|[9]))', -- 3、4位
    '(([0-3][0-9])|([4][0-4])|([5][1])|([8][1-9])|([9][0-9]))', -- 5、6位
    '(([1]([8]|[9])[0-9])|([2]([0]|[0-1])[0-9]))[0-9](0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[0-9]{3}([0-9]|X)') -- 后12位
    OR (LENGTH(number)=15 
    AND number REGEXP CONCAT('^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([1][0-4])|([6][1-6])|([7][1])|([8][1-2]))',
    '(([0][0-9])|([1][0-9])|([2][0-9])|([3][0-9])|([4][0-3])|([5][1-3])|([8][2])|([9][0]|[1]|[9]))',
    '(([0-3][0-9])|([4][0-4])|([5][1])|([8][1-9])|([9][0-9]))',
    '(0[1-9]|[1-9][0-9])(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[0-9]{3}')))
    THEN SET flag = TRUE;
    END IF;
    RETURN flag;
 END

猜你喜欢

转载自www.cnblogs.com/littlehb/p/9485254.html