c#正则表达式验证身份证

身份证格式验证,以及15.18位互转方法 

/// <summary>
    /// 验证18位身份证格式
    /// </summary>
    /// <param name="cid"></param>
    /// <returns>返回字符串,出错信息</returns>
    public string CheckCidInfo18(string cid)
    {
        string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null, null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null, null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null, null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null, "重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null, "陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾", null, null, null, null, null, null, null, null, null, "香港", "澳门", null, null, null, null, null, null, null, null, "国外" };
        double iSum = 0;
        System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|X|x)$");
        System.Text.RegularExpressions.Match mc = rg.Match(cid);
        if (!mc.Success)
        {
            return "- 您的身份证号码格式有误!";
        }
        cid = cid.ToLower();
        cid = cid.Replace("x", "a");
        if (aCity[int.Parse(cid.Substring(0, 2))] == null)
        {
            return "- 您的身份证号码格式有误!";//非法地区
        }
        try
        {
            DateTime.Parse(cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2));
        }
        catch
        {
            return "- 您的身份证号码格式有误!";//非法生日
        }
        for (int i = 17; i >= 0; i--)
        {
            iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber);

        }
        if (iSum % 11 != 1)
            return ("- 您的身份证号码格式有误!");//非法证号

        return "";

    }

    /// <summary>
    /// 验证15位身份证格式
    /// </summary>
    /// <param name="cid"></param>
    /// <returns></returns>
    public string CheckCidInfo15(string cid)
    {
        string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null, null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null, null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null, null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null, "重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null, "陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾", null, null, null, null, null, null, null, null, null, "香港", "澳门", null, null, null, null, null, null, null, null, "国外" };

        System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{15}$");
        System.Text.RegularExpressions.Match mc = rg.Match(cid);
        if (!mc.Success)
        {
            return "- 您的身份证号码格式有误!";
        }
        cid = cid.ToLower();
        cid = cid.Replace("x", "a");
        if (int.Parse(cid.Substring(0, 2)) > aCity.Length)
        {
            return "- 您的身份证号码格式有误!";//非法地区
        }
        if (aCity[int.Parse(cid.Substring(0, 2))] == null)
        {
            return "- 您的身份证号码格式有误!";//非法地区
        }
        try
        {
            DateTime.Parse(cid.Substring(6, 2) + "-" + cid.Substring(8, 2) + "-" + cid.Substring(10, 2));
        }
        catch
        {
            return "- 您的身份证号码格式有误!";//非法生日
        }
        return "";
    }

    /// <summary>
    /// 15位转18位身份证号
    /// </summary>
    /// <param name="perIDSrc"></param>
    /// <returns></returns>
    public string per15To18(string perIDSrc)
    {
        int iS = 0;
        //加权因子常数
        int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
        //校验码常数
        string LastCode = "10X98765432";
        //新身份证号
        string perIDNew;

        perIDNew = perIDSrc.Substring(0, 6);
        //填在第6位及第7位上填上‘1’,‘9’两个数字
        perIDNew += "19";
        perIDNew += perIDSrc.Substring(6, 9);
        //进行加权求和
        for (int i = 0; i < 17; i++)
        {
            iS += int.Parse(perIDNew.Substring(i, 1)) * iW[i];
        }

        //取模运算,得到模值
        int iY = iS % 11;
        //从LastCode中取得以模为索引号的值,加到身份证的最后一位,即为新身份证号。
        perIDNew += LastCode.Substring(iY, 1);

        return perIDNew;
    }

    /// <summary>
    /// 18位转15位身份证号
    /// </summary>
    /// <param name="perIDSrc"></param>
    /// <returns></returns>
    public string per18To15(string perIDSrc)
    {
        //前6位
        string str1 = perIDSrc.Substring(0, 6);
        //后9位
        string str2 = perIDSrc.Substring(8, 9);
        //新字符串
        string perIDNew = str1 + str2;
        return perIDNew;

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对多个平时常用的规则表达式~! 例如(只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。 只能输入非零的正整数:"^\+?[1-9][0-9]*$"。 只能输入非零的负整数:"^\-[1-9][]0-9"*$。 只能输入长度为3的字符:"^.{3}$"。 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。 验证是否含有^%&'',;=?$\"等字符:"[^%&'',;=?$\x22]+"。 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$" 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。 验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值