数据迁移的时候,往往会碰到旧系统的人员身份证数据是15位的,或是经办人员接受的是15位的身份证,而统一18位的身份证是未来系统的方向,因此,数据迁移需要将15位身份证转为18位身份证,这里在网上搜索了一个15位身份证号码转18位身份证号码的函数,稍作了下改动。
create or Replace function CardTo18(p_OldID varchar2) return varchar2 is
-- Author : XJG(xjg@netsky-tech.com)
-- Created : 2003-11-03 18:38:56
-- Purpose : 从原有的15位身份证号转换成新的18位
-- Modify : 只转换身份证号为15位的情况,非15位不处理
type TIArray is table of integer;
type TCArray is table of char(1);
Result varchar2(18);
W TIArray;
A TCArray;
S integer;
begin if Length(p_OldID) = 15 then
W := TIArray(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
A := TCArray('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
Result := SubStr(p_OldID, 1, 6) '19' SubStr(p_OldID, 7, 9);
S := 0;
begin for i in 1 .. 17 loop
S := S + to_number(SubStr(Result, i, 1)) * W(i);
end loop;
exception when others then return '';
end;
S := S mod 11;
Result := Result A(s + 1);
end if;
return(Result);
end CardTo18;
在数据库中结合SQL可把15位身份证全部转换为18位,而18位的身份证忽略不处理。
Update person Set idcard=decode(length(idcard),15,cardto18(idcard),18,idcard,idcard) Where Rownum<21;


没有评论:
发表评论