用SQL函数判断是否有效18位身份证号
ALTER FUNCTION CheckSNID(@snid nvarchar(50))
RETURNS bit AS
BEGIN
declare @iRet bit
declare @id_num varchar(1)
declare @i int
declare @sn_sum int
declare @sn_Last varchar(1)
set @iRet=0
--判断是不是18位
if (len(@snid)<> 18) or (isnull(@snid,'')='')
goto ext
--第七位、第八位不是19 或者 20
if not ((substring(@snid,7,2)='19') or (substring(@snid,7,2)='20'))
goto ext
--判断前17位是否都是数字
select @i=1,@id_num='',@sn_sum=0,@sn_Last=''
while @i<18
begin
--截取身份证中的一位
set @id_num=substring(@snid,@i,1)
if (@id_num<'0') or (@id_num>'9')
goto ext
select @sn_sum=(
case @i when 1 then @sn_sum+cast(@id_num as int)*7
when 2 then @sn_sum+cast(@id_num as int)*9
when 3 then @sn_sum+cast(@id_num as int)*10
when 4 then @sn_sum+cast(@id_num as int)*5
when 5 then @sn_sum+cast(@id_num as int)*8
when 6 then @sn_sum+cast(@id_num as int)*4
when 7 then @sn_sum+cast(@id_num as int)*2
when 8 then @sn_sum+cast(@id_num as int)*1
when 9 then @sn_sum+cast(@id_num as int)*6
when 10 then @sn_sum+cast(@id_num as int)*3
when 11 then @sn_sum+cast(@id_num as int)*7
when 12 then @sn_sum+cast(@id_num as int)*9
when 13 then @sn_sum+cast(@id_num as int)*10
when 14 then @sn_sum+cast(@id_num as int)*5
when 15 then @sn_sum+cast(@id_num as int)*8
when 16 then @sn_sum+cast(@id_num as int)*4
when 17 then @sn_sum+cast(@id_num as int)*2 end)
set @i=@i+1
end
--根据取余判断最后位
set @sn_sum=@sn_sum%11
select @sn_Last=
(case @sn_sum 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)
if (@sn_Last='X')
BEGIN
if (substring(@snid,18,1)='X') or (substring(@snid,18,1)='x')
set @iRet=1
END
ELSE
if (@sn_Last=substring(@snid,18,1))
set @iRet=1
ext:
return @iRet
END;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】