to bzszp(SongZip) ( ) 
他就是要把现在的15位身份证号改成18位的

解决方案 »

  1.   

    for (var i = 1; i < 18; i ++) {
    a[i] = str.substring((17-i),(18-i));
    }
    for(var i = 1; i < 18; i ++){
    r += parseInt(a[i]) * Math.pow(2,i);
    }

    r1 = r % 11;
    if (r1 <= 1) {
    a[0] = 1 - r1;
    }
    else {
    a[0] = 12 - r1;
    }
    if (a[0] == 10) {
    a[0] = 'X';
    }

    for (var i = 1; i < 19; i ++) {
    returnValue += a[18 - i];这部分代码的作用是?
    解释一下
      

  2.   

    select substr('320100780101201',1,6)||'19'||substr('320100780101201',7,9)||'X' from dual
      

  3.   

    自己琢磨了一下,好像应该是可以了
    create or replace function idcard15to18(p_idcard varchar2) return varchar2 is
      Result varchar2(18);
      str1 varchar2(6);
      str2    varchar2(9);
      str     varchar2(100);
      
      i       number;
      r       number;
      r1      number;
      e       varchar2(1);
      
      type myArr is varray(18) of varchar2(100);
      a myArr:=myArr('','','','','','','','','','','','','','','','','','');begin
    if length(p_idcard)=15 then
          r:=0;
          r1:=0;
          Result:='';
          str := trim(p_idcard);
          str1 :=substr(str,1,6);
       str2 := substr(str,7,9);
          
          dbms_output.put_line('str1'||str1||'str2'||str2);
      
          str := str1||'19'||str2;
      
          for i in 1..17 loop
            a(i) := substr(str,18-i,1);
          end loop;
          
          for i in 1..17 loop
              r := r+to_number(a(i))*power(2,i);
           end loop;
           
           r1 := r mod 11;
           if(r1<=1)then
           e:=to_char(1-r1);
           else
           e:=to_char(12-r1);
           end if;
           
           if(a(1)=10) then
           e:='X';
           end if;
           
           for i in 1..17 loop
           Result :=Result||a(18-i);
           end loop;
           
           Result:=Result||e;
           else
           Result:=p_idcard;
           end if;
        
      return(Result);
    end idcard15to18;
      

  4.   

    to bzszp(SongZip):
    这个好像是身份证换算的规则,偶也不懂,只好跟着原来的代码做,我上面贴出来了,测试了几个倒是可以的