`

身份证号码验证规则

    博客分类:
  • js
 
阅读更多

/**
 * 身份证号码验证规则
 * @param idcard 用于输入的身份证号码
 * @returns
 *      err-0:验证通过
 *      err-1:身份证号码位数不对
 *      err-2:身份证号码出生日期超出范围或者含有非法字符
 *      err-3:身份证号码校验错误
 *      err-4:身份证地区非法
 */
function id_rule(idcard) {
    var Errors = new Array(true, false, false, false, false);
    var area = {
        11 :"北京",
        12 :"天津",
        13 :"河北",
        14 :"山西",
        15 :"内蒙古",
        21 :"辽宁",
        22 :"吉林",
        23 :"黑龙江",
        31 :"上海",
        32 :"江苏",
        33 :"浙江",
        34 :"安徽",
        35 :"福建",
        36 :"江西",
        37 :"山东",
        41 :"河南",
        42 :"湖北",
        43 :"湖南",
        44 :"广东",
        45 :"广西",
        46 :"海南",
        50 :"重庆",
        51 :"四川",
        52 :"贵州",
        53 :"云南",
        54 :"西藏",
        61 :"陕西",
        62 :"甘肃",
        63 :"青海",
        64 :"宁夏",
        65 :"新疆",
        71 :"台湾",
        81 :"香港",
        82 :"澳门",
        91 :"国外"
    }
    var idcard, Y, JYM;
    var S, M;
    var idcard_array = new Array();
    idcard_array = idcard.split("");
    //地区检验
    if (area[parseInt(idcard.substr(0, 2))] == null)
        return Errors[4];
    //身份号码位数及格式检验
    switch (idcard.length) {
    case 15:
        if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0
                || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard
                        .substr(6, 2)) + 1900) % 4 == 0)) {
            ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
        } else {
            ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
        }
        if (ereg.test(idcard))
            return Errors[0];
        else
            return Errors[2];
        break;
    case 18:
        //18位身份号码检测
        //出生日期的合法性检查
        //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
        //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
        if (parseInt(idcard.substr(6, 4)) % 4 == 0
                || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard
                        .substr(6, 4)) % 4 == 0)) {
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
        } else {
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
        }
        if (ereg.test(idcard)) {//测试出生日期的合法性
            //计算校验位
            S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10]))
                    * 7
                    + (parseInt(idcard_array[1]) + parseInt(idcard_array[11]))
                    * 9
                    + (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))
                    * 10
                    + (parseInt(idcard_array[3]) + parseInt(idcard_array[13]))
                    * 5
                    + (parseInt(idcard_array[4]) + parseInt(idcard_array[14]))
                    * 8
                    + (parseInt(idcard_array[5]) + parseInt(idcard_array[15]))
                    * 4
                    + (parseInt(idcard_array[6]) + parseInt(idcard_array[16]))
                    * 2 + parseInt(idcard_array[7]) * 1
                    + parseInt(idcard_array[8]) * 6
                    + parseInt(idcard_array[9]) * 3;
            Y = S % 11;
            M = "F";
            JYM = "10X98765432";
            M = JYM.substr(Y, 1);//判断校验位
            if (M == idcard_array[17]){
                return true; //检测ID的校验位
            }
            else {
                return false;
            }
        } else {
            return false;
        }
        break;
    default:
        return false;
        break;
    }
}

分享到:
评论

相关推荐

    身份证号码验证程序 javascript验证的html文件

    综上所述,这个身份证验证程序利用HTML和JavaScript技术实现了对用户输入的身份证号码的有效性检查,提供了良好的用户体验,并遵循了中国身份证号码的验证规则。对于前端开发人员来说,理解和掌握这些技术是至关重要...

    JAVA身份证号码验证工具

    JAVA身份证号码验证工具,通过身份证号码生成规则,能验证15位、18位身份证号码,必备验证方式

    C++中身份证号码验证代码

    在C++编程中,身份证号码验证是一个常见的任务,主要用于确保用户输入的身份信息是合法的。...同时,这个项目也让我们理解了身份证号码的结构和验证规则,对于理解实际应用中的数据验证有很好的实践意义。

    身份证号码验证示例源码.rar

    在这里,你可以找到处理身份证验证逻辑的代码,比如使用正则表达式检查身份证号码的格式,或者调用特定的服务或API来验证身份证号码的真实性。 `from.gif`可能是一个图形文件,可能是表单中的一个图标或者指示性的...

    java身份证号验证源代码

    身份证号码是由18位数字组成的,包含个人的出生日期、性别、地区等信息,并且具有特定的校验规则。本篇文章将深入讲解如何使用Java编写身份证号验证的源代码。 首先,了解身份证号码的基本结构。中国的身份证号码前...

    身份证号码 access版本

    身份证号码查询,只需要输入前面六位,就能查询身份证所在地,不错的东西哦。

    身份证号码验证示例源码2008-4-22

    身份证号码验证是IT行业中常见的需求,特别是在涉及到...通过深入理解身份证号码的结构和校验规则,结合正则表达式的强大功能,我们可以创建出更健壮的验证系统。对于学习和实际项目开发来说,这是一个有价值的参考。

    身份证验证javascript脚本

    #### 15位身份证号码验证规则: - 前六位代表地区编码。 - 接下来的六位表示出生日期(YYMMDD)。 - 最后的三位是顺序号。 - 没有校验码。 #### 18位身份证号码验证规则: - 前六位同样代表地区编码。 - 第七到第十...

    使用Java正则表达式实现一个简单的身份证号码验证

    ### 使用Java正则表达式实现一个简单的身份证号码验证 #### 一、背景介绍 身份证号码是中国公民的身份标识,由15位或18位数字组成(早期为15位,后改为18位)。其中,第18位是校验码,可能是数字0~9或者大写字母X。...

    身份证号码验证的代码

    3. .NET框架提供的`System.ComponentModel.DataAnnotations`命名空间中的`RegularExpressionAttribute`,可以方便地在属性上声明验证规则,例如在MVC或Entity Framework中使用。 4. **异常处理**: 在验证过程中,...

    一个关于身份证号码验证程序

    你可以使用这些数据来测试你的身份证验证程序,确保其能准确识别有效的身份证号码。 开发这样的验证程序需要掌握基本的编程知识,如变量、条件语句、循环和数组等。常见的编程语言如Python、Java、C#等都可以实现。...

    js最权威身份证号码验证

    身份证规则验证 错1个数字都不行 /** * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * p: 性别,奇数为男,偶数为女 * <p /> * ...

    2012中国分省身份证号码前6位地区对照表.pdf

    此外,身份证号码前6位地区对照表还可以应用于身份验证、身份识别、公共服务等领域,例如可以根据身份证号码前6位地区对照表来进行身份验证、身份识别等。 身份证号码前6位地区对照表是中国国家标准GB11643-1989...

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    ASP.NET源码——身份证号码验证示例源码.zip

    通过分析和理解这个身份证验证示例源码,开发者可以学习到如何在 ASP.NET 中进行数据验证、用户输入处理以及错误处理等重要技能,这对于构建更安全、更可靠的Web应用至关重要。同时,这也可以作为一个基础,进一步...

    js身份证号验证

    这里`selectedId`可能是用于区分不同类型的验证规则,但具体用途没有给出,我们主要关注身份证号码的验证逻辑。 对于18位的身份证号码,其验证过程包括以下几个步骤: 1. 定义一个权重数组`w`,这是身份证号码校验...

    JAVA验证身份证号码校验码是否正确.zip

    总结来说,Java验证身份证号码校验码是否正确的关键是理解身份证号码的构成规则和校验码的计算方法,然后编写相应的代码进行逻辑判断。通过上述方法,我们可以在Java程序中实现对身份证号码的准确验证,确保处理个人...

    C#身份证验证器

    在IT行业中,身份证验证器是一种常见的实用工具,主要用于验证个人身份证号码的合法性,并根据有效身份证号码解析出对应的身份信息,如出生日期、性别以及户籍所在地等。本项目以C#编程语言实现,提供了用户友好的...

Global site tag (gtag.js) - Google Analytics