身份证正确性校验

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项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

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

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

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

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