首页 | IT新闻 | 硬件 | 操作系统 | 开发 | 网络编程 | 数据库 | 热门框架 | 网络安全 | 组网 | 建站指南 | 网页制作 | 特效 | 实用技巧 | 服务器 | 办公 | QQ | 探索 | 社区

  • 技术部落
  • 部落首页 > 程序开发 > C/C#/C++ > 正文
  • C#开发中国身份证验证系统
      2008-2-22  来源:博客网  编辑:Jsbulo  热度:

    private bool CheckIDCard_CHS(string IDCard)
    {
    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(’,’);
    string[] Checker = ("1,9,8,7,6,5,4,3,2,1,1").Split(’,’);
    int intLength = IDCard.Length;

    int i = 0, TotalmulAiWi = 0;
    int modValue = 0;
    string strVerifyCode = "";
    string Ai = "";
    string BirthDay = "";
    int intYear = 0;
    int intMonth = 0;
    int intDay = 0;

    if (intLength != 18)
    {
    return false;
    }
    if (intLength == 18)
    {
    Ai = IDCard.Substring(0, 17);
    }
    else if (intLength == 15)
    {
    Ai = IDCard;
    Ai = Ai.Substring(0, 6) + "19" + Ai.Substring(6, 9);
    }
    if (!IsNumeric(Ai)) return false;

    intYear = Convert.ToInt32(Ai.Substring(6, 4));
    intMonth = Convert.ToInt32(Ai.Substring(10, 2));
    intDay = Convert.ToInt32(Ai.Substring(12, 2));

    BirthDay = intYear.ToString() + "-" + intMonth.ToString() + "-" + intDay.ToString();
    if (IsDateTime(BirthDay))
    {
    DateTime DateBirthDay = DateTime.Parse(BirthDay);
    if (DateBirthDay > DateTime.Now)
    {
    return false;
    }

    int intYearLength = DateBirthDay.Year - DateBirthDay.Year;
    if (intYearLength < -140)
    {
    return false;
    }
    }

    if (intMonth > 12    intDay > 31)
    {
    return false;
    }

    for (i = 0; i < 17; i++)
    {
    TotalmulAiWi = TotalmulAiWi + (Convert.ToInt32(Ai.Substring(i, 1)) * Convert.ToInt32(Wi[i].ToString()));
    }
    modValue = TotalmulAiWi % 11;

    strVerifyCode = arrVarifyCode[modValue].ToString();
    Ai = Ai + strVerifyCode;
    if (intLength == 18 && IDCard != Ai)
    {
    return false;
    }
    return true;
    }
    /**////
    /// 判斷字符串是否可轉換為DateTime
    ///
    /// 要判斷的字符串
    /// true=可以轉換;false=無法轉換
    private bool IsDateTime(string s)
    {
    try
    {
    System.DateTime.Parse(s);
    }
    catch
    {
    return false;
    }
    return true;
    }

    /**////
    /// 判斷字符串是否可以轉換為數字
    ///
    /// 要判斷的字符串
    /// true=可以轉換;false=無法轉換
    private bool IsNumeric(object value)
    {
    try
    {
    double i = Convert.ToDouble(value.ToString());
    return true;
    }
    catch (FormatException)
    {
    return false;
    }
    }