根据输入的号码分情况隐藏部分(4位)号码,包括3位区号固话、4位区号固话、手机号等;可以选择隐藏中间或尾部的号码。源代码如下:
CREATE OR REPLACE FUNCTION fn_telnumber_mask (
p_telnumber IN VARCHAR2,
p_flag IN INT -- 0 隐藏中间;1 隐藏尾部
)
RETURN VARCHAR2
IS
BEGIN
IF p_flag = 0
THEN
IF SUBSTR (p_telnumber, 1, 1) = '0' -- 固话
THEN
IF LENGTH (p_telnumber) = 11 -- 三位区号
THEN
IF SUBSTR (p_telnumber, 1, 3) IN
('020',
'021',
'022',
'023',
'024',
'025',
'026',
'027',
'028',
'029',
'010'
)
THEN
RETURN REPLACE (p_telnumber,SUBSTR (p_telnumber, 4, 4),'****');
ELSE -- 四位区号
RETURN REPLACE (p_telnumber,SUBSTR (p_telnumber, 5, 4),'****');
END IF;
ELSE
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, 5, 4), '****');
END IF;
ELSE -- 手机号
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, 4, 4), '****');
END IF;
ELSE -- 隐藏末4位;
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, -4, 4), '****');
END IF;
END fn_telnumber_mask;
/
p_telnumber IN VARCHAR2,
p_flag IN INT -- 0 隐藏中间;1 隐藏尾部
)
RETURN VARCHAR2
IS
BEGIN
IF p_flag = 0
THEN
IF SUBSTR (p_telnumber, 1, 1) = '0' -- 固话
THEN
IF LENGTH (p_telnumber) = 11 -- 三位区号
THEN
IF SUBSTR (p_telnumber, 1, 3) IN
('020',
'021',
'022',
'023',
'024',
'025',
'026',
'027',
'028',
'029',
'010'
)
THEN
RETURN REPLACE (p_telnumber,SUBSTR (p_telnumber, 4, 4),'****');
ELSE -- 四位区号
RETURN REPLACE (p_telnumber,SUBSTR (p_telnumber, 5, 4),'****');
END IF;
ELSE
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, 5, 4), '****');
END IF;
ELSE -- 手机号
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, 4, 4), '****');
END IF;
ELSE -- 隐藏末4位;
RETURN REPLACE (p_telnumber, SUBSTR (p_telnumber, -4, 4), '****');
END IF;
END fn_telnumber_mask;
/