using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WX.CRM.Common { public static class IdCardHelper { // 根据身份证号获取年龄 public static int GetAge(string idCard) { if (string.IsNullOrEmpty(idCard) || idCard.Length != 18) return 0; var birthDate = GetBirthDate(idCard); if (birthDate == DateTime.MinValue) return 0; var today = DateTime.Today; var age = today.Year - birthDate.Year; if (birthDate > today.AddYears(-age)) age--; return age; } // 根据身份证号获取性别 public static string GetGender(string idCard) { if (string.IsNullOrEmpty(idCard) || idCard.Length != 18) return "未知"; var genderCode = idCard.Substring(16, 1); return int.Parse(genderCode) % 2 == 0 ? "女" : "男"; } // 根据身份证号获取出生日期 public static DateTime GetBirthDate(string idCard) { if (string.IsNullOrEmpty(idCard) || idCard.Length != 18) return DateTime.MinValue; var birthDateStr = idCard.Substring(6, 8); if (DateTime.TryParseExact(birthDateStr, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var birthDate)) return birthDate; return DateTime.MinValue; } // 根据身份证号获取地区信息 public static string GetRegion(string idCard) { if (string.IsNullOrEmpty(idCard) || idCard.Length != 18) return "未知"; var regionCode = idCard.Substring(0, 6); // 这里可以根据地区码查询具体地区名称,需要地区码对照表 return regionCode; } /// /// 对身份证号码进行掩码处理,保留前4位和后4位,中间使用*代替 /// /// 身份证号码 /// 掩码后的身份证号码 public static string MaskIdCard(string idCard) { if (string.IsNullOrEmpty(idCard)) { return string.Empty; } // 身份证号长度小于8位直接返回原值 if (idCard.Length < 8) { return idCard; } // 获取前4位 string prefix = idCard.Substring(0, 4); // 获取后4位 string suffix = idCard.Substring(idCard.Length - 4); // 中间部分用*号代替 string mask = new string('*', idCard.Length - 8); // 拼接返回 return $"{prefix}{mask}{suffix}"; } /// /// 获取身份证类型 /// /// 身份证号 /// 身份证类型(国内或国外) public static string GetIdCardType(string idCard) { if (string.IsNullOrEmpty(idCard)) { return "未知"; } // 判断是否为中国大陆身份证号(18位数字,最后一位可能是X) if (idCard.Length == 18 && System.Text.RegularExpressions.Regex.IsMatch(idCard, @"^\d{17}[\dXx]$")) { // 进一步校验前17位是否都是数字 if (System.Text.RegularExpressions.Regex.IsMatch(idCard.Substring(0, 17), @"^\d+$")) { return "国内身份证"; } } return "非国内身份证"; } public static string GetNationality(string idCard) { if (string.IsNullOrEmpty(idCard)) { return "未知"; } // 判断是否为中国大陆身份证号(18位数字,最后一位可能是X) if (idCard.Length == 18 && System.Text.RegularExpressions.Regex.IsMatch(idCard, @"^\d{17}[\dXx]$")) { // 进一步校验前17位是否都是数字 if (System.Text.RegularExpressions.Regex.IsMatch(idCard.Substring(0, 17), @"^\d+$")) { return "中国"; } } return "非国内"; } } }