首页 > 其他分享 >身份证校验

身份证校验

时间:2022-11-28 20:23:26浏览次数:37  
标签:return string int 校验 DateTime 身份证 cardId

static string TestCardId(string cardId)
        {
            string pattern = @"^\d{17}(?:\d|X)$";
            string birth = cardId.Substring(6, 8).Insert(6, "-").Insert(4, "-");
            DateTime time = new DateTime();
            // 加权数组,用于验证最后一位的校验数字
            int[] arr_weight = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
            // 最后一位计算出来的校验数组,如果不等于这些数字将不正确
            string[] id_last = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };   
            int sum = 0;
            //通过循环前16位计算出最后一位的数字
            for (int i = 0; i < 17; i++)
            {
                sum += arr_weight[i] * int.Parse(cardId[i].ToString());
            }
             // 实际校验位的值
            int result = sum % 11; 
            // 首先18位格式检查
            if (Regex.IsMatch(cardId, pattern))
            {   // 出生日期检查
                if (DateTime.TryParse(birth, out time))          
                {
                    // 校验位检查
                    if (id_last[result] == cardId[17].ToString())  
                    {
                        return "身份证验证成功!";
                    }
                    else
                    {
                        return  "身份证最后一位校验错误!";
                    }
                }
                else
                {
                    return "出生日期验证失败!";
                }
            }
            else
            {
                return "身份证号格式错误!";
            }
        }
//调用
var rel=  TestCardId("11019819860908662X");
 Console.WriteLine(rel);

  

标签:return,string,int,校验,DateTime,身份证,cardId
From: https://www.cnblogs.com/qinweizhi/p/16933501.html

相关文章

  • dojo利用promise实现多个异步校验
    代码如下://敏感词过滤varpromiseAll=checkSenstiveWords();promiseAll.then(function(results){ //console.log("results=>",results) //console.log("v1=>"......
  • LRC校验
    LRC校验纵向冗余校验(LongitudinalRedundancyCheck,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验。它是一种从纵向通道上的特定比特串产生校验比特的错误检测......
  • 【最终方法】百度移动适配 url校验不通过的解决方法,URL适配规则
    现在网站除了有pc站外,同时相对应的也有手机站,手机站有时百度识别不是很好,这时我们需要使用百度移动适配,进行调节让自己的pc站和手机站进行匹配到,但是很多网友却发现在适配......
  • 订单校验组件设计
    主要关键类/接口介绍Validator  校验器,定义的是一个具体的校验规则;1.Rule规则,是对一个具体规则的描述,包含校验具体的是哪个字段,用的什么校验器,校验错误的代码、错误描述......
  • groovy语法校验和沙盒(sandbox)运行
    groovy语法校验主要解决脚本在编写时能实时检查语法是否正确,类似IDE的功能,沙盒运行主要解决系统若嵌入System.exit(0),会导致整个应用停掉的问题需要引用的依赖包如下:<!--ht......
  • Lombok库和实体类表单校验--Bean Validation API
    它能够在运行时动态生成getter,setter方法,以及equals()、hashCode()、toString()这些方法;类级别的@Data注解就是由Lombok提供的,它会告诉Lombok生成所缺失的方法,同时还会生成......
  • springboot+vue+element-ui实现前后端的全部校验
    1、前端校验el-form的表单校验<el-form:model="ruleForm"status-icon:rules="rules"ref="ruleForm"label-width="100px"class="demo-ruleForm"><el-form-itemlabel......
  • vue 使用i18n 实现中英文切换 表单校验提示不更新问题
    在用i18n实现中英文切换的时候,出现了在表单中校验不更新的问题,尝试多种方式无果,下面这个方法值得一试。可轻松解决此问题。data(){ruleInline:{userName:......
  • 登录校验封装以及token封装
    封装校验:用户名匹配:登录校验封装:导入模块:(按需导入)使用封装名称:封装token:设置-获取-删除导入token:使用token:......
  • java中给手机号、身份证号等敏感信息脱敏
    sql方式:以手机号示例:ub:表别名 前三后四格式REPLACE(ub.phone,SUBSTR(ub.phone,4,4),'****')ASphone, mybatispils方式:先试用分页构造器查询出数......