select cert_no from jsw_user_info where len(cert_no)<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,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('110108671010545')

update jsw_user_info 
set cert_no=dbo.f_CID15to18(cert_no)

留着以后用到了好找。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
  • 2021-05-20
猜你喜欢
  • 2022-12-23
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案