T-sql 验证身份证算法

本文提供两种身份证号码校验方法:一种是简单的位数和日期检查;另一种是严格的校验位验证,包括日期验证和校验位计算。代码适用于SQL Server环境。

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

1、  简单的检验 ,不校验校验位:

 

create FUNCTION [fn_ValidateIDC]
(
@idc varchar(18)
)
RETURNS BIT
AS
begin
if  (isnumeric(@idc)=1 and len(@idc)=15 and isdate(substring(@idc ,7,6))=1
and (right(@idc ,1)='0' or right(@idc ,1)='1'))

or (len(@idc )=18 and isnumeric(left(@idc ,17))=1 and isdate(substring(@idc ,7,8))=1 
   
and patindex('%[X0-9]%',right(@idc ,1))>0)
    
return 1
return 0
    
end

go

select dbo.fn_ValidateIDC('12345619780901231X')
drop function fn_ValidateIDC

       上面的代码仅检查位数及相应日期位是否合理,不作深内校验,上面的代码 可以简单修改给表的列上做check,网友自行修改。

2、        如果要严格来校验,现我把一个网友(loworth )的代码进行修改整理给大家看:

 

CREATE FUNCTION [fn_ValidateIDC]
(
 
@idc varchar(18)
)
RETURNS BIT
AS
BEGIN

 
DECLARE @validFactors VARCHAR(17),@validCodes VARCHAR(11),@i TINYINT,@iTemp INT
 
SELECT @validFactors='79A584216379A5842',@validCodes='10X98765432',@i=1,@iTemp=0
 
--验证校验位
 
 
IF LEN(@idc)<>15 AND LEN(@idc)<>18--身份证号只有15或18位
  RETURN(0)
 
IF LEN(@idc)=15  --如果是15位身份证 则只验证日期
     IF (ISDATE('19'+SUBSTRING(@idc,7,6))=0 and '19'+SUBSTRING(@idc,7,6between '1900-01-01' and '2010-01-01')
        
RETURN(0)
     
ELSE
        
RETURN(1)
 
--18位身份证 验证日期 校验位
 IF (ISDATE(SUBSTRING(@idc,7,8))=0 and SUBSTRING(@idc,7,6between '1900-01-01' and '2010-01-01')--验证日期
    RETURN(0)
 
---验证校验位开始
 
 
WHILE @i<18
    
BEGIN
       
SELECT @iTemp=@iTemp+CAST(SUBSTRING(@idc,@i,1AS INT)*
             (
CASE SUBSTRING(@validFactors,@i,1WHEN 'A' THEN 10 ELSE SUBSTRING(@validFactors,@i,1END)
             ,
@i=@i+1
    
END
 
IF SUBSTRING(@validCodes,@iTemp%11+1,1)=RIGHT(@idc,1)
    
RETURN 1
 
ELSE
    
RETURN 0
 
RETURN 0
END
GO

 

测试:

 

select dbo.fn_ValidateIDC('32108519**05026619')
/*
------
**  大家用合法身份证号测试
*/

 清理 :

 


drop function fn_ValidateIDC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值