您的位置:首页 > 数据库 > Oracle

oracle pl/sql身份证15位转18位的function

2008-12-21 14:24 519 查看
create or replace function f_15to18(idCardNum varchar2) return varchar2 is
Result varchar2(20);
i smallint;
num smallint:=0;
sNum varchar2(2);
code char(1);
temp17 varchar2(20);
begin

if length(idCardNum)=18 or idCardNum is null then
Result:=upper(idCardNum);
elsif length(idCardNum)=15 then
temp17:=substr(idCardNum,1,6) || '19' || substr(idCardNum,7,9);
i:=18;

while i>1 loop
num:=num+mod(power(2,i-1),11)*substr(temp17,19-i,1) ;
i:=i-1;
end loop;

num:=mod(num,11);

sNum:=num || '';
if num=0 then
code:='1';
elsif num=1 then
code:='0';
elsif num=2 then
code:='X';
else
code:=(12-num) || '';
end if;
Result:=temp17 || code;
else
Result:= idCardNum;
end if;
return Result;
exception
when others then
dbms_output.put_line(idCardNum);

end f_15to18;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: