SQL 校验身份证格式
生活随笔
收集整理的這篇文章主要介紹了
SQL 校验身份证格式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
功能描述:校驗身份證號是否有效 成功返回1 失敗返回0
2019-05-16調用:select [dbo].[fn_IDCardChk]('145124512121')
---------------------------
*/
ALTER FUNCTION [dbo].[fn_IDCardChk] ( @IDCard VARCHAR(18) )
RETURNS BIT
ASBEGINIF LEN(@IDCard) <> 15AND LEN(@IDCard) <> 18--身份證號只有15或18位RETURN(0);--如果是15位身份證 則只驗證日期和是否數字格式IF LEN(@IDCard) = 15IF ISDATE('19' + SUBSTRING(@IDCard, 7, 6)) = 0OR ISNUMERIC(@IDCard) = 0RETURN(0);ELSERETURN(1);--18位身份證 驗證日期 校驗位IF ISDATE(SUBSTRING(@IDCard, 7, 8)) = 0OR ISNUMERIC(SUBSTRING(@IDCard, 1, 17)) = 0--驗證日期和前17位是否數字格式RETURN(0);--驗證校驗位開始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;
居民身份證查詢驗證:http://www.ip33.com/shenfenzheng.html
轉載于:https://www.cnblogs.com/Denghejing/p/10881020.html
總結
以上是生活随笔為你收集整理的SQL 校验身份证格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基,特征向量和基础解系
- 下一篇: Wonderware INSQL his