SQL 校验身份证格式
生活随笔
收集整理的這篇文章主要介紹了
SQL 校验身份证格式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
USE [LoanManagement]
GO
/****** Object: UserDefinedFunction [dbo].[fn_IDCardChk] Script Date: 2019/5/17 14:05:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
---------------------------
編制人:Denghejing
功能描述:校驗(yàn)身份證號(hào)是否有效 成功返回1 失敗返回0
2019-05-16調(diào)用:select [dbo].[fn_IDCardChk]('145124512121')
---------------------------
*/
ALTER FUNCTION [dbo].[fn_IDCardChk] ( @IDCard VARCHAR(18) )
RETURNS BIT
ASBEGINIF LEN(@IDCard) <> 15AND LEN(@IDCard) <> 18--身份證號(hào)只有15或18位RETURN(0);--如果是15位身份證 則只驗(yàn)證日期和是否數(shù)字格式IF LEN(@IDCard) = 15IF ISDATE('19' + SUBSTRING(@IDCard, 7, 6)) = 0OR ISNUMERIC(@IDCard) = 0RETURN(0);ELSERETURN(1);--18位身份證 驗(yàn)證日期 校驗(yàn)位IF ISDATE(SUBSTRING(@IDCard, 7, 8)) = 0OR ISNUMERIC(SUBSTRING(@IDCard, 1, 17)) = 0--驗(yàn)證日期和前17位是否數(shù)字格式RETURN(0);--驗(yàn)證校驗(yàn)位開(kāi)始DECLARE @validFactors VARCHAR(17) ,@validCodes VARCHAR(11) ,@i TINYINT ,@iTemp INT;SELECT @validFactors = '79A584216379A5842',@validCodes = '10X98765432', @i = 1, @iTemp = 0;WHILE @i < 18BEGINSELECT @iTemp = @iTemp+ CAST(SUBSTRING(@IDCard, @i, 1) AS INT)* ( CASE SUBSTRING(@validFactors, @i, 1)WHEN 'A' THEN 10ELSE SUBSTRING(@validFactors, @i, 1)END ), @i = @i + 1;END;IF SUBSTRING(@validCodes, @iTemp % 11 + 1, 1) = RIGHT(@IDCard, 1)RETURN 1;ELSERETURN 0;RETURN NULL;END;
居民身份證查詢驗(yàn)證:http://www.ip33.com/shenfenzheng.html
轉(zhuǎn)載于:https://www.cnblogs.com/Denghejing/p/10881020.html
總結(jié)
以上是生活随笔為你收集整理的SQL 校验身份证格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基,特征向量和基础解系
- 下一篇: 简约述职报告PPT模板