Chinaunix首页 | 论坛 | 博客
  • 博客访问: 118603
  • 博文数量: 31
  • 博客积分: 2035
  • 博客等级: 大尉
  • 技术积分: 339
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-29 07:30
文章分类
文章存档

2011年(1)

2010年(20)

2009年(10)

我的朋友

分类: Oracle

2010-06-17 09:29:56

oracle 函数15位身份证号转18位身份证号,同时可以参考此代码编写身份证校验函数

/*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;


阅读(1948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~