15位身份证升18位
FUNCTION GETNEWID(P_OLDID VARCHAR2) RETURN VARCHAR2 IS
-- Author : XJG(xjg@netsky-tech.com)
-- Created : 2003-11-03 18:38:56
-- Purpose : 从原有的15位身份证号转换成新的18位(附PASCAL代码)
TYPE TIARRAY IS TABLE OF INTEGER;
TYPE TCARRAY IS TABLE OF CHAR(1);
RESULT VARCHAR2(18);
W TIARRAY;
A TCARRAY;
S INTEGER;
BEGIN
IF LENGTH(P_OLDID) <> 15 THEN
RAISE_APPLICATION_ERROR(-20999, '不是旧15位身份证号');
END IF;
W := TIARRAY(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
A := TCARRAY('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
RESULT := SUBSTR(P_OLDID, 1, 6) || '19' || SUBSTR(P_OLDID, 7, 9);
S := 0;
BEGIN
FOR I IN 1 .. 17 LOOP
S := S + TO_NUMBER(SUBSTR(RESULT, I, 1)) * W(I);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
RETURN '';
END;
S := S MOD 11;
RESULT := RESULT || A(S + 1);
RETURN(RESULT);
END GETNEWID;
上海酷克信息科技有限公司 Kuke Infomation Tec. Co.,LTD
公司地址:上海浦东新区向城路28号爵士大厦A座9C
座机:131 6619 7577 传真:021 5831 4494
Email:sutra@kuke.info 网址: http://www.kuke.info/