巧用SQL函数实现身份证15位变18位

数据库 SQL Server
如果想把15位身份证号码转换成18位的身份证号码,使用SQL函数可否实现呢?答案是肯定的。下面就为您介绍使用SQL 函数转换15位身份证号码到18位的方法,供您参考。

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

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

 

【编辑推荐】

教您使用SQL中的TRUNC函数

SQL中表变量是否必须替代临时表

SQL中表变量的不足

SQL循环执行while控制

SQL中游标嵌套循环的示例

责任编辑:段燃 来源: 百度空间
相关推荐

2010-09-09 11:17:44

SQL函数公历

2018-01-04 11:28:23

2020-02-05 15:29:56

计算机网络设备

2009-06-12 11:34:01

2013-09-11 19:10:59

2014-11-12 17:45:14

网络身份识别

2017-05-02 15:10:56

病历智慧城市数据

2011-04-25 10:00:08

联想7205身份证复印

2011-04-29 09:40:59

复印二代身份证多功能一体机

2017-12-27 11:55:24

2009-07-01 19:26:17

云计算WEB虚拟化

2017-12-27 12:41:04

2021-07-04 12:44:04

PythonExcel身份证

2017-12-26 10:43:00

微信身份证网证微警云联盟

2022-01-24 07:16:01

12306电子乘车证明身份证

2017-10-16 13:16:10

民生警务警务平台信息化

2009-12-30 13:39:10

2016-11-02 15:10:56

ADX3000应用交付服务器迪普科技

2012-05-21 17:14:19

夏普复合一体机

2009-08-21 16:55:43

C#空格函数
点赞
收藏

51CTO技术栈公众号