- 博客(0)
- 资源 (3)
- 收藏
- 关注
SQL身份证号验真.txt
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
2019-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人