问题描述
- 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;
beginW:=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)) theninsert 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运算值
解决方案
解决方案二:
身份证验证算法很多,http://www.cnblogs.com/advocate/archive/2012/01/05/2312805.html