qq_32743047
2015-11-16 16:17
采纳率: 0%
浏览 1.6k

oracle身份证校验算法

大神们,用oracle写了一个身份证验证的算法,这样写运算不出来。求教该怎么改?哪边错了?
--身份证号码验证-------
declare
type TIArray is table of integer;
---type TCArray is table of varchar2(1);

cursor c is
select q.zjbh,t.dah,z.xgr from zd_qssp t inner join qlrinfo q on t.projectid=q.projectid inner join zj_xx z on t.projectid=z.prjid where t.dah is not null
and length(q.zjbh)=18 and q.zjzl='居民身份证';

tab varchar2(200);
W TIArray;
--- A TCArray;

S integer;
zuihyw varchar2(1);
jieguo number;
begin

W:=TIArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
S:=0;
for emp in c
loop
for i in 1 .. 17 loop
S:=S+ to_number(SubStr(emp.zjbh, i, 1)) * W(i);
end loop;
jieguo:=S mod 11;
case
when jieguo=0 then
zuihyw:='1';
when jieguo=1 then
zuihyw:='0';
when jieguo=2 then
zuihyw:='X';
when jieguo=3 then
zuihyw:='9';
when jieguo=4 then
zuihyw:='8';
when jieguo=5 then
zuihyw:='7';
when jieguo=6 then
zuihyw:='6';
when jieguo=7 then
zuihyw:='5';
when jieguo=8 then
zuihyw:='4';
when jieguo=9 then
zuihyw:='3';
else
zuihyw:='2';
end case;
if(zuihyw!=substr(emp.zjbh,18)) then

insert into shenfzh_info(zjbh,dah,xgr) values(emp.zjbh,emp.dah,emp.xgr);
end if;
end loop;
exception when others then null;
end;
字段说明:zuihyw : 身份证最后一位。
jieguo : mod运算值

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新