T_SQL二代身份证验证代码

首先我们来看看验证规则:
从第一位到第十七位的系数分别为: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
接下来将这17位数字和系数相乘的结果相加,然后用加出来和除以11,看余数,余数只可能有 0-1-2-3-4-5-6-7-8-9-10 这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
注意:该验证方法仅针对18位身份证。

创建一个存储过程,代码如下:

creater proc sfzjy@sfzh varchar(18) --身份证号码as begin declare @i int --循环变量declare @sum int --位数与系数之和declare @xs varchar(17) --将固定系数存为字符串set @sum=0set @xs='79a584216379a5842'--当系数为10时转换为aset @i=1while (@i<=17)beginset @sum= cast(substring(@sfzh,@i,1) as int)*( ( case when substring(@xs,@i,1)='a' then 10 else cast (SUBSTRING(@xs,@i,1) as int) end) )+@sumset @i=@i+1enddeclare @ys int --余数set @ys= @sum%11declare @jym varchar(4) --校验码set @jym= case when @ys=0 then '1'when @ys=1 then '0'when @ys=2 then 'X'when @ys=3 then '9'when @ys=4 then '8'when @ys=5 then '7'when @ys=6 then '6'when @ys=7 then '5'when @ys=8 then '4'when @ys=9 then '3'when @ys=10 then '2' end if(@jym=right(@sfzh,1)) --对比校验码与身份证最后一位数是否相等return 1elsereturn 0end

注意:在调用存储过程,传入身份证参数时,注意对身份证字段进行处理,左右去空,限制身份证号码为18位。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部