sql server身份证校验

本文介绍了一个用于验证中国身份证号码合法性的SQL Server存储过程。该函数通过检查身份证号码的格式、长度及校验位来判断其有效性。

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

CREATE  FUNCTION [dbo].[f_CheckID](@Card varchar(20))
RETURNS TINYINT
AS
BEGIN
DECLARE @res INT 
IF ISNUMERIC(LEFT(@Card,17)) = 0  --不是数字
set @res = 1  --有非法字符
ELSE IF  CHARINDEX(RIGHT(@Card, 1),'0123456789X') = 0
SET @res= 2 -- 最后一码有非法字符
ELSE IF LEN(@Card)<>15 AND LEN(@Card)<> 18
SET @res= 3 -- 长度错误
ELSE IF @Card IS NULL
SET @res= 5 -- 身份证为NULL
ELSE if LEN(@Card) =18 AND CASE  (SUBSTRING(@Card,1,1) * 7 + 
SUBSTRING(@Card,2,1)*9 + 
SUBSTRING(@Card,3,1)*10 + 
SUBSTRING(@Card,4,1)*5 + 
SUBSTRING(@Card,5,1)*8 +
SUBSTRING(@Card,6,1)*4 + 
SUBSTRING(@Card,7,1) * 2 + 
SUBSTRING(@Card,8,1) * 1 + 
SUBSTRING(@Card,9,1) * 6 + 
SUBSTRING(@Card,10,1) * 3 + 
SUBSTRING(@Card,11,1) * 7 + 
SUBSTRING(@Card,12,1) * 9 + 
SUBSTRING(@Card,13,1) * 10+ 
SUBSTRING(@Card,14,1) * 5 + 
SUBSTRING(@Card,15,1) * 8 + 
SUBSTRING(@Card,16,1) * 4 + 
SUBSTRING(@Card,17,1)*2) % 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'
ELSE 'Err' END = RIGHT(@Card,1)
BEGIN
SET @res = 0  --合法身份证
end
ELSE IF LEN(@Card) =15
SET @res = 0 --合法身份证
ELSE
SET @res = 4  --校验码错误
RETURN @res;
END








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值