(转)身份证15转18位

身证份15位转18位

测试用例用*显示部分系统人为修改,

 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,1as 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('32108519760502***9')  
   
 
/* 
 ------------------  
 32108519760502***9 
  
 (所影响的行数为 1 行) 
  
 
*/
  
 
select dbo.f_CID15to18('321085760502***')  
   
 
/* 
 ------------------  
 32108519760502***9 
  
 (所影响的行数为 1 行) 
  
 
*/
 

 

posted on 2008-07-25 09:26  冷月孤峰  阅读(1022)  评论(0)    收藏  举报