CREATE DEFINER=`root`@`%` FUNCTION `FUN_MOBILE_CHECK`( p_mobile VARCHAR(100)) RETURNS varchar(50) CHARSET utf8
DETERMINISTIC
BEGIN
-- 功能:校验手机号码是否合法
-- 入参:手机号码(varchar)
-- 返回值(varchar):1:通过,0:不通过
-- 校验规则:
-- 字符串仅包含[0-9+]
-- 头部去除"+86"和"86"以后长度满足11位
-- 头部去除"+86"和"86"以后字符串以"13","14","15","16","17","18","19"开头
DECLARE V_RETURN VARCHAR(50);
DECLARE v_mobile VARCHAR(100);
DECLARE v_mobile_2 VARCHAR(100);
DECLARE v_reg_1 VARCHAR(10); -- 正则校验结果
DECLARE v_len int;
SET V_RETURN = '1'; -- 1:通过
SET v_reg_1 = '1'; -- 1:通过
-- 去掉头部 +86
set v_mobile = replace(p_mobile, '+86', '');
-- 去掉头部 86
set v_len = length(v_mobile);
select (case when left(v_mobile, 2) = '86' then right(v_mobile, (v_len - 2) ) else v_mobile end)
into v_mobile_2
from dual;
-- 正则校验 头部去除"+86"和"86"以后,字符串为11位数字组成,以"13","14","15","16","17","18","19"开头
select v_mobile_2 regexp '^1[3-9]{1}[0-9]{9}$'
into V_RETURN
from dual;
RETURN V_RETURN;
END