本帖最后由 伤疤也微笑 于 2019-1-24 11:07 编辑
自己百度写了个验证身份证号码的SQL函数,不知道活字格是否能调用SQL函数?
函数如下,如果写的不好,可以自己改改!(我这只做了18位身份证号码的,未考虑15位的)
/*
---------------------------
校验身份证号是否有效 成功返回1 失败返回0
Jackerson
---------------------------
*/
ALTER FUNCTION [dbo].[fIDCardChk] ( @IDCard VARCHAR(18) )
RETURNS nvarchar(20)
AS
BEGIN
IF LEN(@IDCard) <> 18--身份证号只有18位
RETURN('错误');
--18位身份证 验证日期 校验位
IF ISDATE(SUBSTRING(@IDCard, 7, 8)) = 0
OR ISNUMERIC(SUBSTRING(@IDCard, 1, 17)) = 0--验证日期和前17位是否数字格式
RETURN('错误');
--验证校验位开始
DECLARE @validFactors VARCHAR(17) ,
@validCodes VARCHAR(11) ,
@i TINYINT ,
@iTemp INT;
SELECT @validFactors = '79A584216379A5842',
@validCodes = '10X98765432', @i = 1, @iTemp = 0;
WHILE @i < 18
BEGIN
SELECT @iTemp = @iTemp
+ CAST(SUBSTRING(@IDCard, @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(@IDCard, 1)
RETURN '正确';
ELSE
RETURN '错误';
RETURN NULL;
END;
|
|