旧的身份证号吗(15位)如何转换为新的(18位)

/*
根据〖中华人民共和国国家标准   GB   11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
15位身份证号码未位是双数是女性,单数是男性。
分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。

最后一位的計算公式∑(ai×Wi)(mod   11)
*/
引用:http://zhidao.baidu.com/question/10975747.html

use tempdb go if object_id('F_Iden15To18') is not null drop function F_Iden15To18 go create function F_Iden15To18(@Iden char(15)) returns char(18) as begin if len(@Iden)<>15 return @Iden declare @CID varchar(18),@i int,@sum int select @CID=left(@Iden,6) + '1'+case when right(@Iden,3) in('999','998','997','996') then '8' else '9' end + right (@Iden,9),@i=1,@sum=0 while @i<=17 select @sum=substring(@CID,18-@i,1)*(power(2,@i)%11)+@sum,@i=@i+1 return (@CID+case 12-@sum%11 when 10 then 'X' else rtrim(12-@sum%11) end) end go select dbo.F_Iden15To18('340524800101001') /* 34052419800101001X */

你可能感兴趣的:(function,object)