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;
/
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;
/
相关文章推荐
- oracle 自定义身份证15位转18位 函数
- Oracle常用函数:IDCARD15TO18() 身份证15位转18位函数
- SQL 将身份证的15位号码升级为18位
- 身份证号 15位转换18位 SQL语句
- pl/sql版本的18位身份证号码生成算法
- oracle 中身份证号15位升18位
- [导入]Oracle常用函数:IDCARD15TO18() 身份证15位转18位函数
- 15位身份证升18位身份证的Oracle函数
- 写了个15位身份证号升级为18位的SQL语句
- Oracle PL/SQL之函数索引(Function-based indexes)使用示例
- oracle PL/SQL FUNCTION PROCEDURES
- 写了个15位身份证号升级为18位的SQL语句
- Oracle PL/SQL之不能在function里面调用DBMS_LOCK(Grant to role OR Grant to user)
- SQL 2005身份证函数包含验证和15位转18位
- Oracle PL/SQLWarning: Function created with compilation errors.
- Oracle PL/SQL之函数索引(Function-based indexes)使用示例
- 将15位身份证升级成18位的用户定义Function...
- Oracle PL/SQL之不能在function里面调用DBMS_LOCK(Grant to role OR Grant to user)
- 【转】SQL 2005身份证函数包含验证和15位转18位
- Oracle PL/SQL之函数索引(Function-based indexes)使用示例