c#根据身份证获取身份证信息

匿名 (未验证) 提交于 2019-12-02 22:06:11

/// <summary>
/// 根据身份证获取身份证信息
/// 18位身份证
/// 0地区代码(1~6位,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码)
/// 1出生年月日(7~14位)
/// 2顺序号(15~17位单数为男性分配码,双数为女性分配码)
/// 3性别
///
/// 15位身份证
/// 0地区代码
/// 1出生年份(7~8位年,9~10位为出生月份,11~12位为出生日期
/// 2顺序号(13~15位),并能够判断性别,奇数为男,偶数为女
/// 3性别
/// </summary>
/// <param name="cardId"></param>
/// <returns></returns>
public string[] GetIdCardInfo(string cardId)
{
  string[] info = new string[4];

  if (string.IsNullOrEmpty(cardId))
  {
    return info;
  }

  try
  {
    System.Text.RegularExpressions.Regex regex = null;
    if (cardId.Length == 18)
    {
      regex = new Regex(@"^\d{17}(\d|x|X)$");
      if (regex.IsMatch(cardId))
      {

        info.SetValue(cardId.Substring(0, 6), 0);
        info.SetValue(DateTime.ParseExact(cardId.Substring(6, 8), "yyyyMMdd", CultureInfo.CurrentCulture).ToString("yyyy-MM-dd"), 1);
        info.SetValue(cardId.Substring(14, 3), 2);
        info.SetValue(Convert.ToInt32(info[2]) % 2 != 0 ? "男" : "女", 3);
      }
    }
    else if (cardId.Length == 15)
    {
      regex = new Regex(@"^\d{15}");
      if (regex.IsMatch(cardId))
      {
        info.SetValue(cardId.Substring(0, 6), 0);
        info.SetValue(DateTime.ParseExact(cardId.Substring(6, 6), "yyyyMMdd", CultureInfo.CurrentCulture).ToString("yyyy-MM-dd"), 1);
        info.SetValue(cardId.Substring(12, 3), 2);
        info.SetValue(Convert.ToInt32(info[2]) % 2 != 0 ? "男" : "女", 3);
      }
    }
  }
  catch (Exception ex)
  {
    info[0] = ex.Message;
  }

  return info;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!