身份证正确性校验

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

相关文章

校验码:奇偶校验,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 测试的实体类 //创建实体

spring项目使用邮箱验证码校验

本项目采用免费QQ邮箱验证码方式进行登录安全的校验。 前期工作 申请邮箱安全授权码 打开QQ邮箱官网点击设置 进入设置页面后点击账户按钮  进入账户后一直往下拉页面找到POP3服务栏,然后点击管理服务(如果没有开启服务需要先开启服务,按照邮箱提示操作即可) 进入管理服务页面后如果没有授权码,点击生成授权码,如果有即可进入授权码管理页面查看。 授权码过一段时间会自动过期,需要重

zdppy+vue3+onlyoffice文档管理系统实战 20240906 上课笔记 整合权限校验中间件

基于角色方法的中间件基本用法 import zdppy_api as apiimport zdppy_apimidauthasync def index(request):return api.resp.success()async def login(request):token = zdppy_apimidauth.get_role_token(role="admin")return ap

Spring源码学习--使用XML Schema文档对XML实例文档校验

文章摘要 在实际开发中读取xml文档的时候,一般都需要先校验,如果使用Sun的XML相关软件包会令你云里雾里。W3C这块的XML相关的规范相当的多,这也是导致XML处理器起来费劲的主要原因。如果xml对应的xsd文档已经定义好,则可以之间复用下面代码对xml文档格式和内容是否合法进行验证。 一、xsd校验xml工具类 import javax.xml.parsers.SA

struts2 xml validator 校验

分类: 【字段校验】  ---- field-validator   ---- 字段优先,我去校验谁(字段),我用谁(校验器)来校验 【非字段校验】  ---- validator  ---- 校验器优先,我用谁(校验器)来校验,我去校验谁(字段) ****** 这两种只是  表现形式  不同,底层是相同的,都是把错误信息放到fielder