|
查询新身份证(18位)的校验位(2) when 8 then '4' when 9 then '3' when 10 then '2' */ /* 以上为算法详细说明,下面是SQL的自定义函数,返回值为18位的校验码 */ Create function getCheckCode(@SFZH char(18)) Returns char(1) As Begin declare @r char(1) declare @i int if len(@SFZH) <> 18 set @r = '?' else set @i = cast(substring(@SFZH,1,1) as int) * 7 +cast(substring(@SFZH,2,1) as int) * 9 +cast(substring(@SFZH,3,1) as int) * 10 +cast(substring(@SFZH,4,1) as int) * 5 +cast(substring(@SFZH,5,1) as int) * 8 +cast(substring(@SFZH,6,1) as int) * 4 +cast(substring(@SFZH,7,1) as int) * 2 +cast(substring(@SFZH,8,1) as int) * 1 +cast(substring(@SFZH,9,1) as int) * 6 +cast(substring(@SFZH,10,1) as int) * 3 +cast(substring(@SFZH,11,1) as int) * 7 +cast(substring(@SFZH,12,1) as int) * 9 +cast(substring(@SFZH,13,1) as int) * 10 +cast(substring(@SFZH,14,1) as int) * 5 +cast(substring(@SFZH,15,1) as int) * 8 +cast(substring(@SFZH,16,1) as int) * 4 +cast(substring(@SFZH,17,1) as int) * 2 set @i = @i - @i/11 * 11 set @r = (case @i when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9' when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5' when 8 then '4' when 9 then '3' when 10 then '2' else '/' end) Return(@r) End /* Usage: select dbo.getcheckcode('身份证号') */
|