身份证验证JS版(转载)

/**
*代码参考来自:http://www.oschina.net/code/snippet_778481_21907
*只验证身份证是否正确,未加上判断性别
*@param num 身份证号码
*@return boolean true|false
*使用,var bools = checkIdentity.validate(num);
*/
var checkIdentity = {
    validate:function(num)
    {
        var areaNum = dateNum = sexNum = endNum = 0;
        if(num == "" || num== null || num == undefined)
        {
            return false;
        }
        // 不是15位或不是18位都是无效身份证号
        if(num.length != 15 && num.length != 18){
            return false;
        }
        // 是数值
        if(!isNaN(num)){
            // 如果是15位身份证号
            if(num.length == 15 ){
                // 省市县(3位)
                areaNum = num.substring(0,3);
                // 出生年月(6位)
                dateNum = num.substring(6,12);
                // 性别(3位)
                sexNum = num.substring(12,15);
            }else{
            // 如果是18位身份证号
                // 省市县(6位)
                areaNum = num.substring(0,6);
                // 出生年月(8位)
                dateNum = num.substring(6,14);
                // 性别(3位)
                sexNum = num.substring(14,17);
                // 校验码(1位)
                endNum = num.substring(17,18);
            }
        }else{
        // 不是数值

            if(num.length == 15){
                return false;
            }else{
                // 验证前17位为数值,且18位为字符x
                var check17 = num.substring(0,17);
                if(isNaN(check17)){
                    return false;
                }
                // 省市县(6位)
                areaNum = num.substring(0,6);
                // 出生年月(8位)
                dateNum = num.substring(6,14);
                // 性别(3位)
                sexNum = num.substring(14,17);
                // 校验码(1位)
                endNum = num.substring(17,18);
                if(endNum != ‘x‘ && endNum != ‘X‘){
                    return false;
                }
            }
        }

        if(areaNum != 0){
            if(!this._checkArea(areaNum)){
                return false;
            }
        }

        if(dateNum != 0){
            if(!this._checkDate(dateNum)){
                return false;
            }
        }

        if(endNum != 0){
            if(!this._checkEnd(endNum,num)){
                return false;
            }
        }

        return true;

    },
    _checkArea:function(area)
    {
        var num1 = area.substring(0,2);
        // var num2 = area.substring(2,2);
        // var num3 = area.substring(4,2);
        // 根据GB/T2260—999,省市代码11到65
        if(10 < num1 && num1 < 66){
            return true;
        }else{
            return false;
        }
        //============
        // 对市 区进行验证
        //============
    },
    _checkDate:function(date)
    {
        var statusY = date1 = date2 = date3="";
         if(date.length == 6){
            date1 = date.substring(0,2);
            date2 = date.substring(2,4);
            date3 = date.substring(4,6);
            statusY = this._checkY(‘19‘+date1);
        }else{
            var nowDate = new Date();
            date1 = date.substring(0,4);
            date2 = date.substring(4,6);
            date3 = date.substring(6,8);
            var nowY  = nowDate.getFullYear();
            if(1900 < date1 && date1 <= nowY){
                statusY = this._checkY(date1);
            }else{
                return false;
            }
        }
        if(0 < date2 && date2 <13){
            if(date2 == 2){
                // 润年
                if(statusY){
                    if(0 < date3 && date3 <= 29){
                        return true;
                    }else{
                        return false;
                    }
                }else{
                // 平年
                    if(0 < date3 && date3 <= 28){
                        return true;
                    }else{
                        return false;
                    }
                }
            }else{
                var maxDateNum = this._getDateNum(statusY,date2);
                if(0 < date3 && date3 <= maxDateNum){
                    return true;
                }else{
                    return false;
                }
            }
        }else{
            return false;
        }
    },
    _checkY:function(Y){
        // 验证平年润年,参数年份,返回 true为润年  false为平年
        if(typeof Y == ‘string‘){
            Y = parseInt(Y);
        }
        if(Y % 100 == 0){
            if(Y % 400 == 0){
                return true;
            }else{
                return false;
            }
        }else if(Y % 4 ==  0){
            return true;
        }else{
            return false;
        }
    },
    _getDateNum:function($year,$month)
    {
        var days = new Date($year,$month,0).getDate();
        return days;
    },
    _checkEnd:function(end,num){
        var checkHou = new Array(1,0,‘x‘,9,8,7,6,5,4,3,2);
        var checkGu = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
        var sum = 0;
        var numArr = new Array();
        for(var j = 0;j < num.length;j++)
        {
            var tmpJ = j+1;
            numArr[j] = num.substring(j,tmpJ);
        }
        for(var i = 0;i < 17;i++){
            sum += parseInt(checkGu[i]) * parseInt(numArr[i]);
        }
        var checkHouParameter= sum % 11;
        if(checkHou[checkHouParameter] != num.substring(17,18)){
            return false;
        }else{
            return true;
        }
    }
}

这是自己将PHP代码转成Javascript,由于时间比较赶,未进行很多测试,如发现不对的地方,还请你能指出,告诉我,非常感谢.

我的联系邮箱是:[email protected]

时间: 2024-12-10 04:50:58

身份证验证JS版(转载)的相关文章

中国第二代身份证验证js代码

下面这部分代码截取自盛大的某个网页,具体我就不给url了,下面是对应的js代码: iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); iSum = 0; for( i=0;i<17;i++){ iC = v_card.charAt(i) ; iVal = parseInt(iC); iSum += iVal * iW[i]; } iJYM = iSum % 11; var sJYM = ''; if(iJYM == 0) sJYM = &qu

结合正则表达式验证数学公式(含变量,js版)

今天有朋友让我帮他写一个正则表达式,要求能验证一个数学公式格式是否正确. 数学公式中有括号,变量(未知数)和运算符,而且变量是重数据库中读取的,可以任意添加和删除. 这个用一个正则表达式实现是不可能的,所以我给他写了一个函数,如下: (function(){ /* * 假如待选变量: ID,NUM,TOTAL,AVL TEST * 正确的公式例子:ID*NUM+(TOTAL/AVL)*0.5 * 错误的公式例子:ID**|0.5 */ function fn(string, obj){// TO

基于JS的身份证验证(完整版)

var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份证验证位值.10代表X function checkIdcard(idCard) { idCard = trim(idCard);//去掉字符串头尾空格 if (idCard.length == 15) { return is

HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)

原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代之前,那是不可能实现的,必须要上传到后台,由后台脚本读取文本流后进一步验证.这样就造成了一定的服务器资源浪费.但是html5时代,这个工作我们完全可以交给前端来做了. 另一方面,html5时代,许多我们原来的图片预览方案都失效了.究其原因,其实是现代浏览器出于对用户隐私的保护,file控件不再提供真

中文输入验证AngularJS版

<!DOCTYPE html><html ng-app="myApp" ng-controller="myCtrl" ><head lang="en"> <meta charset="UTF-8"> <title>T63-中文输入验证AngularJS版</title> <script src="js/angular.js" ty

MyEclipse取消验证Js的两种方法

MyEclipse取消验证Js的两种方法 作者: 字体:[增加 减小] 类型:转载 通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有两种解决方法,大家可以尝试下 前言:有时我们通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有俩种解决方法: 1. 选中当前工程—properties—MyEclipse—validation—Excluded Resource下找到须要作废验证的文件或者文件夹就可以了. 2. 找到在项目路径下面的.project文件中配置了一些验

GIS(六)——实现js版搜狗地图周边搜索功能

在上一篇文章<GIS(五)--完成js版搜狗地图基本交互搜索功能>中,介绍了搜狗地图的关键字搜索功能,今天就实现以下另一个重要功能吧--那就是周边搜索功能. 按照惯例,还是把官网上的示例代码给大家贴出来.飞机票在此.周边搜索的功能,跟关键字搜索其实是一样的,也是主要用到的了SearchRequest这个类,点击这里查看api文档.SearchRequest 对象规范: 属性 类型 说明 map Map 进行搜索的地图实例 renderer SearchRenderer 将结果进行渲染的对象.也

js正则 转载

script中使用的正则表达式的例子,但是没有说这些正则表达式如何使用,现在给大家几个例子,大家可以看看.利用正则表达式判断是否是0-9的阿拉伯数字 function regIsDigit(fData){    var reg = new RegExp("^[0-9]$");    return (reg.test(fData));} 利用这则表达式获取字符串的长度 function regDataLength(fData){    var valLength = fData.leng

跨浏览器的placeholder – 原生JS版

转自来源 : http://www.ifrans.cn/placehoder/ 跨浏览器的placeholder – 原生JS版 html5为input元素新增了一个属性”placeholder”,提供对输入字段预期值的提示信息,input为空且未获得焦点时显示,获得焦点时消失,非常实用.目前,大部分现代浏览器都对placeholder属性提供了支持,IE10也是支持的.如果需要使IE6~IE9等浏览器支持placeholder,只有借助js了. 在这些不支持原生placeholder属性的浏览