/*15位身份证转18位*/
FUNCTION GET_NEWCERT(
OLDCERT IN VARCHAR2)
RETURN VARCHAR2
IS
NEW_CERT VARCHAR2(20);
OLD_CERT VARCHAR2(17);
I NUMBER;
SUMID NUMBER;
CHECKID VARCHAR2(34);
ENDID VARCHAR2(11);
BEGIN
ENDID :='10X98765432';
CHECKID :='0709100508040201060307091005080402';
SUMID :=0;
OLD_CERT :=SUBSTR(OLDCERT,1,6)||'19'||SUBSTR(OLDCERT,7,9);
IF LENGTH(OLDCERT)=15 AND FHTS_DATE.IS_DATE(SUBSTR(OLD_CERT,7,8))=0 THEN
FOR I IN 1..17
LOOP
SUMID:=SUMID+TO_NUMBER(SUBSTR(OLD_CERT,I,1))*TO_NUMBER(SUBSTR(CHECKID,I*2-1,2));
END LOOP;
NEW_CERT:= OLD_CERT||SUBSTR(ENDID,MOD(SUMID,11)+1,1);
ELSE
NEW_CERT:=OLDCERT;
END IF;
RETURN NEW_CERT;
END GET_NEWCERT;
|