找回密码
 立即注册

QQ登录

只需一步,快速开始

伤疤也微笑

初级会员

15

主题

72

帖子

295

积分

初级会员

积分
295

微信认证勋章

伤疤也微笑
初级会员   /  发表于:2019-1-24 10:53  /   查看:2813  /  回复:3
本帖最后由 伤疤也微笑 于 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;

3 个回复

倒序浏览
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2019-1-24 11:33:17
沙发
老铁。你这样写也不好的,
这样的校验肯定是在浏览器上就避免了,不要再给数据库存了,我们有现成的身份证验证方法啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
伤疤也微笑
初级会员   /  发表于:2019-1-24 11:44:07
板凳
Simon.hu 发表于 2019-1-24 11:33
老铁。你这样写也不好的,
这样的校验肯定是在浏览器上就避免了,不要再给数据库存了,我们有现成的身份证 ...

我看到这个正则表达式了,实际业务过程中经常是把1输成0   2输成3,正则表达式不能验证最后一位校验码,我这个函数刚好可以验证最后一位校验码,只是我也不懂JS,不知道JS能不能写出这个函数,身份证输完后,自动用JS进行校验,或者点保存或者提交的时候用JS进行校验,这个函数只是对某个单元格的值判断,并不存储,建议以后如果可以的话要能增加调用SQL函数是最好的,毕竟很多的软件有某些功能直接写成函数了,如果活字格能直接调用它的函数会节省很多时间!
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2019-1-24 15:12:32
地板
伤疤也微笑 发表于 2019-1-24 11:44
我看到这个正则表达式了,实际业务过程中经常是把1输成0   2输成3,正则表达式不能验证最后一位校验码, ...

看您在群里说,您不是有例子么?
请您将您的例子拿出来参考一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部