使用SQL对身份证位数只有15.17为的补充到18位

本文提供了一个用于转换15位、17位或18位身份证号的SQL Server函数,包括长度合法性校验、非数字字符合法性校验以及计算并添加校验位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

USE [xd]
GO
/****** Object:  UserDefinedFunction [dbo].[sfz15to18]    Script Date: 04/24/2013 16:41:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[sfz15to18](@idtfin varchar(18))--转换身份证号
returns  varchar(18)     --输出号码
as
begin

 declare @errtcd int,@prrtcd int,@idtfou varchar(18)


 --exec kn_pc_reg 'kn_cs_convertidtfno'

 declare @retval int

    declare @idtf17 varchar(18),   --中间17位处理变量
        @loopvl int,--循环变量
        @smryvl int        --校验位和

    --将输入身份证赋给中间处理变量
    select @idtf17 = rtrim(ltrim(@idtfin))
    --身份证长度合法性校验

    if len(@idtf17) not in (15, 17, 18)
    begin
        select @idtfou = @idtfin
     
        select @retval = -1
        select @idtfou = '身份证长度不正确'
    end

    --转化为十七位身份证(没有校验位)
    select @idtf17 = case len(@idtf17)
        when 15 then
            substring(@idtf17, 1, 6) + '19' + substring(@idtf17, 7, 9)
        when 18 then
            substring( @idtf17 ,1, 17)
      else @idtf17
    end

    --计算校验位数值
    select @loopvl = 17, @smryvl = 0
    while @loopvl > 0
    begin
  --非数字字符的合法性校验
        if ascii(substring(@idtf17, @loopvl, 1)) < 48 or ascii(substring(@idtf17, @loopvl, 1) ) >57
        begin
            select @idtfou = @idtfin
        
         select @retval = -2
          select @idtfou = '身份证号码不合法'
        end
        select @smryvl = @smryvl + convert(int,substring(@idtf17, @loopvl, 1)) *
            (case (19 - @loopvl)
            when 1 then 1 when 2 then 2 when 3 then 4
            when 4 then 8 when 5 then 5 when 6 then 10
            when 7 then 9 when 8 then 7 when 9 then 3
            when 10 then 6 when 11 then 1 when 12 then 2
            when 13 then 4 when 14 then 8 when 15 then 5
      when 16 then 10 when 17 then 9 when 18 then 7
            end)
        select @loopvl = @loopvl - 1
    end

    --生成最终号码
    select @idtfou = @idtf17 + case @smryvl % 11
        when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
        when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'
        when 8 then '4' when 9 then '3' when 10 then '2' end

return @idtfou
end

要下载 EpicInstaller 的特定版本 15.17.1,可以通过以下方法实现: ### 方法一:通过官方存档页面获取 许多软件厂商会提供历史版本的下载链接。对于 Epic Games Launcher 或其安装程序,可以尝试访问 Epic Games 的官方网站或相关开发者资源页面查找旧版安装文件。 如果无法直接找到对应的下载链接,可以参考第三方可信镜像站点(如 Nexus Mods 或其他合法分发平台),但需注意验证文件的真实性和安全性[^1]。 ### 方法二:手动构建安装器 如果目标版本未公开发布,可能需要从源码编译 EpicInstaller。此过程涉及设置开发环境并满足依赖项需求。以下是所需的关键步骤说明: - **Python 环境配置**:类似于 `node-sass` 安装失败的情况,在 Windows 平台上通常需要先安装 Python 和 `windows-build-tools` 工具链来支持本地模块构建[^2]。 - **GCC 编译工具准备**:在 Linux 下,确保已正确安装指定版本的 GCC 编译器。例如,当尝试执行 `sudo apt install gcc-11.2` 遇到问题时,可改用更通用的形式完成安装,并进一步确认实际部署的具体子版本号[^3]: ```bash sudo apt update && sudo apt install gcc-11 g++-11 gcc-11 --version ``` ### 方法三:利用虚拟化技术运行离线副本 针对某些特殊场景下的兼容性挑战,比如 Hyper-V 功能冲突导致 Docker 初始化失败等问题[^5],考虑采用独立沙盒机制加载所需的 EpicInstaller 老版本实例。这包括但不限于调整主机系统的硬件加速选项或者切换至基于 HAXM 的替代方案。 最后附带一段伪代码用于演示如何自动化处理上述部分操作逻辑: ```python import subprocess def check_and_install_gcc(version="11"): try: result = subprocess.run(["gcc-" + version, "--version"], capture_output=True, text=True) installed_version = result.stdout.splitlines()[0].strip() print(f"Installed GCC Version: {installed_version}") except FileNotFoundError as e: print("GCC not found! Installing now...") subprocess.call(["sudo", "apt", "update"]) subprocess.call(["sudo", "apt", "-y", "install", f"gcc-{version}", f"g++-{version}"]) check_and_install_gcc() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值