0°

利用SQL函数语句验证身份证号码的有效性

在现有的技术中,检测身份证的方式虽然能够进行识别身份证信息,但是无法判断身份证是否缺角甚至过期,且用户上传的身份证图片多为复杂背景,无法有效的识别,从而导致无效身份证照片图像通过验证。

背景技术:

在互联网化的背景下,很多业务场景为了验证用户身份,需要对用户上传的身份证图片进行质检,然而一些用户使用他人的身份证或者被公安机关剪角后的身份证进行上传,导致很多业务风险,最终造成企业的损失。及时检测出身份证照图像是否有缺角或遮挡角显得极为重要。

在现有的技术中,检测身份证的方式虽然能够进行识别身份证信息,但是无法判断身份证是否缺角甚至过期,且用户上传的身份证图片多为复杂背景,无法有效的识别,从而导致无效身份证照片图像通过验证。

— 身份证号只有15或18位

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

— 18位身份证 验证日期 校验位

sql函数开始

IF EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N’dbo.fun_IsValidID’)

AND type in (‘IF’, ‘FN’, ‘TF’))

DROP FUNCTION dbo.fun_IsValidID

GO

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 ISNUMERIC(@ID)=0

RETURN(0);

ELSE

RETURN(1);

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

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

IF ISDATE(SUBSTRING(@ID,7,8))=0 OR ISNUMERIC(SUBSTRING(@ID,1,17))=0

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

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论