身份证正确性校验

2024-05-10 10:08
文章标签 校验 身份证 正确性

本文主要是介绍身份证正确性校验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

验证身份证的有效性,是否符合身份证规范;调用IDCardValidate方法,返回“true”为有效,否则为无效提示

    /** * 功能:身份证的有效验证 * @param IDStr 身份证号 * @return 有效:返回"true" ;无效:返回String信息 * @throws ParseException */ public static String IDCardValidate(String IDStr) throws ParseException {  String errorInfo = "true";// 记录错误信息  String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4","3", "2" };  String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7",  "9", "10", "5", "8", "4", "2" };  String Ai = "";String Ai1 = "";String Ai2 = "";// 号码的长度 15位或18位 if (IDStr.length() != 15 && IDStr.length() != 18) {  errorInfo = "身份证号格式不正确";  return errorInfo;  }  //数字 除最后以为都为数字if (IDStr.length() == 18) {  Ai = IDStr.substring(0, 17);  } else if (IDStr.length() == 15) {  Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);  }  if (isNumeric(Ai) == false) {  errorInfo = "身份证号格式不正确";  return errorInfo;  }  //出生年月是否有效String strYear = Ai.substring(6, 10);// 年份  String strMonth = Ai.substring(10, 12);// 月份  String strDay = Ai.substring(12, 14);// 月份  if (isDataFormat(strYear + "-" + strMonth + "-" + strDay) == false) {  errorInfo = "身份证生日无效。";  return errorInfo;  }  GregorianCalendar gc = new GregorianCalendar();  SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");  try {if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 || (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime())< 0){  errorInfo = "身份证生日不在有效范围。";  return errorInfo;  }} catch (NumberFormatException e) {e.printStackTrace();} catch (java.text.ParseException e) {e.printStackTrace();}  if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {  errorInfo = "身份证月份无效";  return errorInfo;  }  if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {  errorInfo = "身份证日期无效"; return errorInfo;  }  //地区码时候有效  Hashtable h = GetAreaCode();  if (h.get(Ai.substring(0, 2)) == null) {  errorInfo = "身份证地区编码错误";  return errorInfo;  }  //判断最后一位的值 int TotalmulAiWi = 0;  for (int i = 0; i < 17; i++) {  TotalmulAiWi = TotalmulAiWi  + Integer.parseInt(String.valueOf(Ai.charAt(i)))  * Integer.parseInt(Wi[i]);  }  int modValue = TotalmulAiWi % 11;  String strVerifyCode = ValCodeArr[modValue]; Ai1 = Ai + strVerifyCode.toUpperCase();   Ai2 = Ai + strVerifyCode.toLowerCase(); if (IDStr.length() == 18) {  if (Ai1.equals(IDStr) == false && Ai2.equals(IDStr) == false) {  errorInfo = "身份证号格式不正确"; return errorInfo;  } }else{return errorInfo;}return errorInfo;  }
     /** * 功能:判断字符串是否为数字 * @param str * @return */ private static boolean isNumeric(String str) {  Pattern pattern = Pattern.compile("[0-9]*");  Matcher isNum = pattern.matcher(str);  if (isNum.matches()) {  return true;  } else {  return false;  }  }
     /** * 功能:设置地区编码 * @return Hashtable 对象 */ private static Hashtable GetAreaCode() {  Hashtable hashtable = new Hashtable();  hashtable.put("11", "北京");  hashtable.put("12", "天津");  hashtable.put("13", "河北");  hashtable.put("14", "山西");  hashtable.put("15", "内蒙古");  hashtable.put("21", "辽宁");  hashtable.put("22", "吉林");  hashtable.put("23", "黑龙江");  hashtable.put("31", "上海");  hashtable.put("32", "江苏");  hashtable.put("33", "浙江");  hashtable.put("34", "安徽");  hashtable.put("35", "福建");  hashtable.put("36", "江西");  hashtable.put("37", "山东");  hashtable.put("41", "河南");  hashtable.put("42", "湖北");  hashtable.put("43", "湖南");  hashtable.put("44", "广东");  hashtable.put("45", "广西");  hashtable.put("46", "海南");  hashtable.put("50", "重庆");  hashtable.put("51", "四川");  hashtable.put("52", "贵州");  hashtable.put("53", "云南");  hashtable.put("54", "西藏");  hashtable.put("61", "陕西");  hashtable.put("62", "甘肃");  hashtable.put("63", "青海");  hashtable.put("64", "宁夏");  hashtable.put("65", "新疆");  hashtable.put("71", "台湾");  hashtable.put("81", "香港");  hashtable.put("82", "澳门");  hashtable.put("91", "国外");  return hashtable;  } 
     /*** 验证日期字符串是否是YYYY-MM-DD格式* @param str* @return*/public static boolean isDataFormat(String str){boolean flag=false;//String regxStr="[1-9][0-9]{3}-[0-1][0-2]-((0[1-9])|([12][0-9])|(3[01]))";String regxStr="^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";Pattern pattern1=Pattern.compile(regxStr);Matcher isNo=pattern1.matcher(str);if(isNo.matches()){flag=true;}return flag;}

 

这篇关于身份证正确性校验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976142

相关文章

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

Python批量读取身份证信息录入系统和重命名

前言 大家好, 如果你对自动化处理身份证图片感兴趣,可以尝试以下操作:从身份证图片中快速提取信息,填入表格并提交到网页系统。如果你无法完成这个任务,我们将在“Python自动化办公2.0”课程中详细讲解实现整个过程。 实现过程概述: 模块与功能: re 模块:用于从 OCR 识别出的文本中提取所需的信息。 日期模块:计算年龄。 pandas:处理和操作表格数据。 PaddleOCR:百度的

web登录校验

基础登录功能 LoginController @PostMapping("/login")Result login(@RequestBody Emp emp) {log.info("前端,发送了一个登录请求");Emp e = empService.login(emp);return e!=null?Result.success():Result.error("用户" +"名或密码错误");

贷款利率高低跟什么有关?仅凭身份证就能贷到款?额度是多少?

在金融的广阔舞台上,借款人的“信用基石”——即其综合资质,是决定贷款利率高低的决定性因素。这并非偶然,而是银行基于详尽的风险评估与收益预期所做出的精准判断。 需明确的是,贷款的易得性并不意味着无门槛的放任。它更像是设置了一个更为宽泛的准入标准,让多样化的借款人能够有机会尝试,但能否真正获得贷款,还需依据个人的经济实力、职业稳定性及信用历史的纯净度来综合评判。银行的核心考量始终在于确保资金的安

spring数据校验Validation

文章目录 需要的依赖创建校验对象Validator 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> 创建校验对象Validator 测试的实体类 //创建实体