当前位置:  数据库>oracle

15位身份证升18位身份证的Oracle函数

    来源: 互联网  发布时间:2017-05-11

    本文导语: 15位身份证升18位身份证的Oracle函数: CREATEORREPLACEFUNCTION FUNC_AAC00215_18 (prm_aac002 varchar2) return varchar2 is ll_i number(4) := 18; ll_row number(5) := 0; var_aac002 varchar2(18); ll_sfz18 number(3); ll_sfz varchar2(3); var_sfz18 varchar(18); var_date varchar(10); dat_...

15位身份证升18位身份证的Oracle函数:

  • CREATEORREPLACEFUNCTION FUNC_AAC00215_18 (prm_aac002 varchar2)
  • return varchar2 is
  • ll_i number(4) := 18;
  • ll_row number(5) := 0;
  • var_aac002 varchar2(18);
  • ll_sfz18 number(3);
  • ll_sfz varchar2(3);
  • var_sfz18 varchar(18);
  • var_date varchar(10);
  • dat_date date;
  • ll_num number(2);
  • s_sfz varchar2(15);
  • s_sss varchar2(20):='X';
  • v_newaac002 varchar(18);
  • n_length number(2);
  • V_CHAR varchar2(15);
  • s_date varchar2(15);
  • begin
  • if prm_aac002 isnullthen
  • return'';
  • end if;
  • if length(prm_aac002) 15 and length(prm_aac002) 18 then
  • return'';
  • end if;
  • if length(prm_aac002) = 18 then
  • n_length := length(prm_aac002);
  • FOR n_i IN 1 .. n_length LOOP
  • V_CHAR := SUBSTR(prm_aac002, n_i, 1);
  • IF V_CHAR IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') AND N_I20 or substr(prm_aac002,7, 2) = 2 loop
  • begin
  • select to_number(substr(prm_aac002, 19 - n_length, 1))
  • into ll_num
  • from dual;
  • exception
  • when others then
  • return'';
  • end;
  • ll_row := ll_row + mod(power(2, (n_length - 1)), 11) *
  • to_number(substr(prm_aac002, 19 - n_length, 1));
  • n_length := n_length - 1;
  • end loop;
  • ll_sfz18 := mod(ll_row, 11);
  • select decode(to_char(ll_sfz18),'0','1','1','0','2','X','3','9','4','8','5','7','6','6','7','5','8','4','9','3','10','2')
  • into ll_sfz
  • from dual;
  • if ll_sfz substr(prm_aac002,18, 1) then
  • return'尾数不对!应为'||ll_sfz;
  • end if;
  • RETURN v_newaac002;
  • end if;
  • if prm_aac002 = '111111111111111111'then
  • return'';
  • end if;
  • if s_sfz 'X'then
  • s_sss := s_sfz;
  • else
  • s_sss := prm_aac002;
  • end if;
  • if length(prm_aac002)=15 then
  • var_date := '19' || substr(s_sss, 7, 6);
  • begin
  • select to_date(var_date, 'yyyymmdd') into dat_date from dual;
  • exception
  • when others then
  • return'';
  • end;
  • var_aac002 := substr(s_sss, 0, 6) || '19' ||
  • substr(s_sss, 7, 9);
  • while ll_i >= 2 loop
  • begin
  • select to_number(substr(var_aac002, 19 - ll_i, 1))
  • into ll_num
  • from dual;
  • exception
  • when others then
  • return'';
  • end;
  • ll_row := ll_row + mod(power(2, (ll_i - 1)), 11) *
  • to_number(substr(var_aac002, 19 - ll_i, 1));
  • ll_i := ll_i - 1;
  • end loop;
  • ll_sfz18 := mod(ll_row, 11);
  • select decode(to_char(ll_sfz18),'0','1','1','0','2','X','3','9','4','8','5','7','6','6','7','5','8','4','9','3','10','2')
  • into ll_sfz
  • from dual;
  • var_sfz18 := var_aac002 || ll_sfz;
  • return var_sfz18;
  • end if;
  • end func_aac00215_18;
  • /
  • show errors;
  • 使用如下:

    SELECT func_aac00215_18('371102841104258') FROM dual;


        
     
     

    您可能感兴趣的文章:

  • 用sql实现18位身份证校验代码分享 身份证校验位计算
  • 求:18位身份证号码校验的源程序
  • ****PDA上对18位身份证的校验算法的实现****
  • JAVA 18位身份证号码校验码的算法
  • jquery表单验证框架提供的身份证验证方法(示例代码)
  • php根据身份证号码计算年龄的实例代码
  • 50分求教怎样判断身份证号码的合法性
  • 二代身份证验证示例
  • Jquery正则验证身份证号码与Email邮箱的代码
  • HTML标签参考手册 iis7站长之家
  • C#身份证验证的代码一例
  • C#身份证验证小例子
  • asp.net 验证身份证号码的代码一例
  • javascript身份证验证代码
  • java身份证验证代码实现
  • 一个计算身份证号码校验位的Python小程序
  • 有谁知道身份证最后一位校验码的算法公式吗?
  • 基于Python的身份证号码自动生成程序
  • asp.net实现根据身份证判断性别和生日
  • PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,