由于二代身份证15位升为18位,很多SQL数据库中存储的数据都需要改变,下面就为您介绍使用SQL 函数转换15位身份证号码到18位的方法,供您参考,希望对您学习SQL函数的使用能够有所启示。

10年积累的成都做网站、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有贵港免费网站建设让你可以放心的选择与我们合作。
create function f_CID15to18 (@sfz char(18)) 
 returns char(18)
 as
 begin
    declare @osfz varchar(18)
     declare @i int,@ai int,@wi int,@sum int,@mod int,@result int
     set @osfz = @sfz
     set @sum = 0
     IF len(@osfz) = 15 
     begin
         set @osfz = substring(@osfz,1,6) + '19' + substring(@osfz,7,9)
         set @i = 2
         
         while @i <= 18 
         begin
             set @ai = cast(substring(@osfz,19 - @i,1) as int)
             set @wi = POWER (2, (@i - 1))% 11 
             set @sum = @sum + @ai * @wi
             set @i = @I + 1
         end
        set @mod = @sum % 11 
         set @result = 12 - @mod
        IF @result >= 10 
             IF @result = 10 
                 RETURN @osfz + 'X'
             ELSE 
             begin 
                 set @result = @result - 11
                 RETURN @osfz + ltrim(@result)
             end 
         ELSE 
             RETURN @osfz + ltrim(@result)
     end
     ELSE 
         RETURN @sfz
     return @sfz
 end 
 go
 -- select dbo.f_CID15to18('411023 850207 106')
 -- /*
 -- ------------------ 
 -- 32108519760502***9
 -- (所影响的行数为 1 行)
 -- */
 -- select dbo.f_CID15to18('321085760502***')
 -- /*
 -- ------------------ 
 -- 32108519760502***9
 -- (所影响的行数为 1 行)
 -- */
 -- drop function f_CID15to18