巧用SQL函數(shù)實(shí)現(xiàn)身份證15位變18位
由于二代身份證15位升為18位,很多SQL數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)都需要改變,下面就為您介紹使用SQL 函數(shù)轉(zhuǎn)換15位身份證號(hào)碼到18位的方法,供您參考,希望對(duì)您學(xué)習(xí)SQL函數(shù)的使用能夠有所啟示。
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
-- (所影響的行數(shù)為 1 行)
-- */
-- select dbo.f_CID15to18('321085760502***')
-- /*
-- ------------------ 
-- 32108519760502***9
-- (所影響的行數(shù)為 1 行)
-- */
-- drop function f_CID15to18
【編輯推薦】















 
 
 






 
 
 
 