zoukankan      html  css  js  c++  java
  • js 验证身份证 带X

      <script type="text/javascript" language='javascript'>
        function isIdCardNo(num)
        {
            var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
            var error;
            var varArray = new Array();
            var intValue;
            var lngProduct = 0;
            var intCheckDigit;
            var intStrLen = num.length;
            var idNumber = num;
            // initialize
            if ((intStrLen != 15) && (intStrLen != 18))
            {
                return false;
            }
            // check and set value
            for(i=0;i<intStrLen;i++)
            {
                varArray[i] = idNumber.charAt(i);
                if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17))
                {
                    return false;
                }
                else if (i < 17)
                {
                    varArray[i] = varArray[i]*factorArr[i];
                }
            }
           
            if (intStrLen == 18)
            {
                //check date
                var date8 = idNumber.substring(6,14);
                if (checkDate(date8) == false)
                {
                    //error = "身份证中日期信息不正确!.";
                    return false;
                }
                // calculate the sum of the products
                for(i=0;i<17;i++)
                {
                    lngProduct = lngProduct + varArray[i];
                }
                // calculate the check digit
                intCheckDigit = 12 - lngProduct % 11;
                switch (intCheckDigit)
                {
                    case 10:
                    intCheckDigit = 'X';
                    break;
                    case 11:
                    intCheckDigit = 0;
                    break;
                    case 12:
                    intCheckDigit = 1;
                    break;
                }
                // check last digit
                if (varArray[17].toUpperCase() != intCheckDigit)
                {
                    return false;
                }
           }
           else
            {   //length is 15
                //check date
                var date6 = idNumber.substring(6,12);
                if (checkDate(date6) == false)
                {
                    //alert("身份证日期信息有误!.");
                    return false;
                }
            }
            return true;
        }
       
        function checkDate(date)
        {
            return true;
        }

        function test()
        {
            var id = document.getElementById('id').value;
            alert(id);
            alert(isIdCardNo(id));
        }
    </script>

    c#代码

    using System;

    ///<summary>
    /// Summary description for IDCardValid
    ///</summary>
    publicclass IDCardValid
    {
    public IDCardValid()
    {
    //
    // TODO: Add constructor logic here
    //
    }

    ///<summary>
    /// 验证身份证号码
    ///</summary>
    ///<param name="Id">身份证号码</param>
    ///<returns>验证成功为True,否则为False</returns>
    publicstaticbool CheckIDCard(string Id)
    {
    if (Id.Length ==18)
    {
    bool check = CheckIDCard18(Id);
    return check;
    }
    elseif (Id.Length ==15)
    {
    bool check = CheckIDCard15(Id);
    return check;
    }
    else
    {
    returnfalse;
    }
    }
    #region 身份证号码验证

    ///<summary>
    /// 验证15位身份证号
    ///</summary>
    ///<param name="Id">身份证号</param>
    ///<returns>验证成功为True,否则为False</returns>
    privatestaticbool CheckIDCard18(string Id)
    {
    long n =0;
    if (long.TryParse(Id.Remove(17), out n) ==false|| n < Math.Pow(10, 16) ||long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) ==false)
    {
    returnfalse;//数字验证
    }
    string address ="11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
    if (address.IndexOf(Id.Remove(2)) ==-1)
    {
    returnfalse;//省份验证
    }
    string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
    DateTime time
    =new DateTime();
    if (DateTime.TryParse(birth, out time) ==false)
    {
    returnfalse;//生日验证
    }
    string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
    string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
    char[] Ai = Id.Remove(17).ToCharArray();
    int sum =0;
    for (int i =0; i <17; i++)
    {
    sum
    +=int.Parse(Wi[i]) *int.Parse(Ai[i].ToString());
    }
    int y =-1;
    Math.DivRem(sum,
    11, out y);
    if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
    {
    returnfalse;//校验码验证
    }
    returntrue;//符合GB11643-1999标准
    }

    ///<summary>
    /// 验证18位身份证号
    ///</summary>
    ///<param name="Id">身份证号</param>
    ///<returns>验证成功为True,否则为False</returns>
    privatestaticbool CheckIDCard15(string Id)
    {
    long n =0;
    if (long.TryParse(Id, out n) ==false|| n < Math.Pow(10, 14))
    {
    returnfalse;//数字验证
    }
    string address ="11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
    if (address.IndexOf(Id.Remove(2)) ==-1)
    {
    returnfalse;//省份验证
    }
    string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
    DateTime time
    =new DateTime();
    if (DateTime.TryParse(birth, out time) ==false)
    {
    returnfalse;//生日验证
    }
    returntrue;//符合15位身份证标准
    }
    #endregion
    }

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    3Sum Closest
    二叉树的下一个结点
    数组中重复的数字
    不用加减乘除做加法
    和为S的连续正数序列
    数组中只出现一次的数字
    求二叉树的是否为平衡二叉树
    由一道很简单的求两条链表的第一个公共节点的问题引发的思考
    第14章 网络编程
    第13章 文档与串行化
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319353.html
Copyright © 2011-2022 走看看