人口信息检测提示,有许多身份证的校验码是错的。多半都是在数据库1.0时编的身份证号。因此要找出检验码不对的并加以改正。
具体做法是:
1、将所有的身份证号的人都Insert 到Pisch库的表中。
, [RenSfzhm] FROM [pis_base_xj].[dbo].[jc_pjb] where renSfzhm is not null
2、用身份证的前十七位算出余数,并放到S1中。
Update [PisCh].[dbo].[Sfz3]
set s1=((SUBSTRING (rensfzhm1,1,1)*7+SUBSTRING (rensfzhm1,2,1)*9+SUBSTRING (rensfzhm1,3,1)*10+SUBSTRING (rensfzhm1,4,1)*5+SUBSTRING (rensfzhm1,5,1)*8+
SUBSTRING (rensfzhm1,6,1)*4+SUBSTRING (rensfzhm1,7,1)*2+SUBSTRING (rensfzhm1,8,1)*1+SUBSTRING (rensfzhm1,9,1)*6+
SUBSTRING (rensfzhm1,10,1)*3+SUBSTRING (rensfzhm1,11,1)*7+SUBSTRING (rensfzhm1,12,1)*9+SUBSTRING (rensfzhm1,13,1)*10+
SUBSTRING (rensfzhm1,14,1)*5+SUBSTRING (rensfzhm1,15,1)*8+SUBSTRING (rensfzhm1,16,1)*4+SUBSTRING (rensfzhm1,17,1)*2)%11)
注:有一条的第17位是X,请社区的自行修改。
005 4 5 28 2 吕勤 1 1952-04-09 520103006 520102195204092XXX
002 6 26 63 1 蒋亚西 2 1975-09-18 520102002 52272619750918X004
001 7 8 24 4 罗丹 1 1977-02-20 520102001 52010219770220163.
005 4 5 47 1 陈晓丰 1 1978-06-11 330324101 33.501197806111214
201 2 8 29 3 喻海玲 2 1996-07-09 520102201 51102319960709*386 NULL NULL NULL NULL
003 4 19 5 1 陈维 1 1965-05-21 520102003 52010219650521001* NULL NULL NULL NULL
003 4 25 11 3 徐泽海 1 1991-11-28 520102003 52010219911128081* NULL NULL NULL NULL
003 2 24 62 3 杨开琴 2 1986-08-19 522731212 52273119860819074* NULL NULL NULL NULL
003 2 24 62 5 张昕 2 1984-01-08 220322100 22032219840108886* NULL NULL NULL NULL
003 4 30 5 4 钟亚 2 1986-07-29 520102003 52010319860729204* NULL NULL NULL NULL
003 4 30 13 2 谢素香 2 1968-12-21 520102003 52010219681221202* NULL NULL NULL NULL
3、将校验码放到S2中。
Update [PisCh].[dbo].[Sfz3]
set s2=A1
from [PisCh].[dbo].[Sfz3] a join
(select a.*,b.CodeNumber as a1 from [PisCh].[dbo].[Sfz3] a inner join
[Attach_PIS2].[dbo].[A_Code] b on b.Type=99 and a.s1=b.Code
) b on a.xzCode=b.xzCode and a.cunCode=b.cunCode and a.zuCode=b.zuCode and a.huCode=b.huCode
and a.RenCode=b.RenCode where LEN(RenSfzhm1)=18
4、删除15位的,和校验码是正确的人
delete
FROM [PisCh].[dbo].[Sfz3]
where LEN(RenSfzhm1)=15
delete
FROM [PisCh].[dbo].[Sfz3]
where SUBSTRING (rensfzhm1,18,1)=S2
剩下的就是校验码不正确的了