600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > sql server 验证身份证号码有效性

sql server 验证身份证号码有效性

时间:2021-06-18 08:06:12

相关推荐

sql server 验证身份证号码有效性

有些情况下 ,数据库里的身份证号码有很多无效数据,这时候要刷选所有有效的身份证号码数据该如何做呢?

可以建一个函数,然后直接调用即可,sql如下:

CREATE FUNCTION [dbo].[fun_IsValidID](@ID Varchar(18))

-- Add the parameters for the stored procedure here

RETURNS BIT

AS

BEGIN

DECLARE @ValidFactors VARCHAR(17),

@ValidCodes VARCHAR(11),

@I TINYINT,

@iTemp INT

--位数不满足则为非法ID

IF Len(@ID) <> 15 AND Len(@ID) <> 18

RETURN(0);

--如果是15位身份证 则只验证日期和是否数字格式

IF LEN(@ID)=15

IF ISDATE('19'+SUBSTRING(@ID,7,6))=0 OR @ID NOT LIKE REPLICATE('[0-9]',15)

RETURN(0);

ELSE

RETURN(1);

/*18位身份证 验证日期 校验位 */

--验证日期和前17位是否数字格式

IF ISDATE(SUBSTRING(@ID,7,8))=0 OR LEFT(@ID,17) NOT LIKE REPLICATE('[0-9]',17)

RETURN(0);

--验证校验位开始

SELECT @ValidFactors='79A584216379A5842',

@ValidCodes='10X98765432',

@I=1,@iTemp=0

WHILE @i<18

BEGIN

SELECT

@iTemp=@iTemp+CAST(SUBSTRING(@ID,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1) WHEN 'A' THEN 10 ELSE SUBSTRING(@ValidFactors,@i,1) END)

,@i=@i+1

END

IF SUBSTRING(@ValidCodes,@iTemp%11+1,1)=RIGHT(@ID,1)

RETURN(1);

ELSE

RETURN(0);

RETURN NULL;

END

GO

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。