Oracle使用存储函数效验手机号是否正确

CREATE OR REPLACE FUNCTION XIAOYAN_D(PHONENUMBER IN VARCHAR2) RETURN NUMBER AS
  FAN NUMBER(11);
BEGIN
  SELECT LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(PHONENUMBER, ' ', ''), '(', ''), ')', ''), '+', ''), '-', ''),
               '860')
    INTO FAN
    FROM DUAL;  --对手机号做清洗处理
  IF LENGTH(FAN) != 11 THEN
    RETURN '';  
  ELSIF REPLACE(TRANSLATE(FAN, '0123456789', '0'), '0', '') IS NOT NULL THEN  
    DBMS_OUTPUT.PUT_LINE(FAN || '不是[0-9]的数字序列');
    RETURN '';
  ELSIF SUBSTR(FAN, 1, 3) NOT IN ('139', '138', '137', '136', '134', '135', '147', '150', '151', '152', '157', '158', '159', '172', '178','182','183','184','187','188','195','197','198',
         '130', '131', '132', '140', '145', '146', '155', '156','158', '166', '185', '186', '175', '176', '196',
         '133', '149', '153', '177', '173', '180', '181', '189', '191', '193', '199',
         '162', '165', '167', '170', '171') THEN
    DBMS_OUTPUT.PUT_LINE('前三位数字不合法:' || SUBSTR(FAN, 1, 3));  
    RETURN ''; 
  ELSE 
    DBMS_OUTPUT.PUT_LINE('合法号码');
    RETURN FAN; 
  END IF;
EXCEPTION
  WHEN OTHERS THEN  
    DBMS_OUTPUT.PUT_LINE('异常:'); 
    DBMS_OUTPUT.PUT_LINE(SQLCODE||sqlerrm); 
    RETURN ''; 
END XIAOYAN_D;

 

posted @ 2022-11-03 09:16  我是小二  阅读(206)  评论(0)    收藏  举报