参考网址

import java.util.Arrays;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class IdentityVerificationUtil {private static String[] vcity = {"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50","51","52","53","54","61","62","63","64","65","71","81","82","91"};//省份代号public static boolean nameVerification (String name){if (name.length()<1) {return false;}String reg= "^(([a-zA-Z+\\.?\\·?a-zA-Z+]{2,30}$)|([\\u4e00-\\u9fa5+\\·?\\u4e00-\\u9fa5+]{2,30}$))";//判断用户输入的真实姓名是否为空if(name.length()>20){return false;}if(name.length()==0){return false;}//检测姓名的格式是否匹配else if(!Pattern.matches(reg,name)){return false;}else {return true;}}public static boolean phoneVerification (String phone){if (phone.length()<1) {return false;}String reg= "^1(3|4|5|6|7|8|9)\\d{9}$";if(!Pattern.matches(reg,phone)){return false;} else {return true;}}public static boolean idCardVerification (String idCard){if (idCard.length()<1) {return false;}//是否为空if ("".equals(idCard)) {return false;}//校验长度,类型String longTypeReg = "(^\\d{15}$)|(^\\d{17}(\\d|X)$)";if(!Pattern.matches(longTypeReg,idCard)) {return false;}//取身份证前两位,校验省份String checkProvince = idCard.substring(0,2);if (!Arrays.asList(vcity).contains(checkProvince)) {return false;}//检查生日是否正确if (!checkBirthday(idCard)) {return false;}//检验位的检测if(!checkParity(idCard)) {return false;}return true;}public static boolean checkBirthday(String idCard) {int len = idCard.length();//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字if(len == 15){String re_fifteen = "^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$";Pattern p = Pattern.compile(re_fifteen);Matcher arr_data = p.matcher(idCard);while (arr_data.find()) {int year = Integer.parseInt("19"+arr_data.group(2));int month = Integer.parseInt(arr_data.group(3));int day = Integer.parseInt(arr_data.group(4));Calendar birthday = Calendar.getInstance();birthday.set(year,month-1,day);return verifyBirthday(year, month, day, birthday);}}//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为Xif(len == 18){String re_eighteen = "^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$";Pattern p = Pattern.compile(re_eighteen);Matcher arr_data = p.matcher(idCard);while (arr_data.find()) {int year = Integer.parseInt(arr_data.group(2));int month = Integer.parseInt(arr_data.group(3));int day = Integer.parseInt(arr_data.group(4));//Date birthday = new Date(year+"/"+month+"/"+day);Calendar birthday = Calendar.getInstance();birthday.set(year,month-1,day);return verifyBirthday(year,month,day,birthday);}}return false;}public static boolean verifyBirthday(int year,int month,int day,Calendar birthday){Calendar now = Calendar.getInstance();int now_year = now.get(Calendar.YEAR);
//        int now_year = now.get(Calendar.MONTH);
//        int now_year = now.get(Calendar.DAY_OF_MONTH);if(birthday.get(Calendar.YEAR) == year && (birthday.get(Calendar.MONTH)+1) == month && birthday.get(Calendar.DAY_OF_MONTH) == day){//判断年份的范围(3岁到100岁之间)int time = now_year - year;if(time >= 3 && time <= 100){return true;}return false;}return false;}public static boolean checkParity(String card){//15位转18位card = changeFivteenToEighteen(card);int len = card.length();if(len == 18){int[] arrInt = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};String[] arrCh = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};int cardTemp = 0;for(int i = 0; i < 17; i ++){cardTemp += Integer.parseInt(card.substring(i, i+1)) * arrInt[i];}String valnum = arrCh[cardTemp % 11];if (valnum.equals( card.substring(17, 18))){return true;}return false;}return false;}public static String changeFivteenToEighteen(String card){if(card.length() == 15) {int[] arrInt = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};String[] arrCh = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};int cardTemp = 0;card = card.substring(0, 6) + "19" + card.substring(6, card.length());for(int i = 0; i < 17; i ++) {cardTemp += Integer.parseInt(card.substring(i, i+1) )* arrInt[i];}card += arrCh[cardTemp % 11];return card;}return card;}public static void main(String[] args) {System.out.println(nameVerification("孙策"));System.out.println(phoneVerification("15857324581"));//trueSystem.out.println(idCardVerification("330781198502074555"));//true//System.out.println(idCardVerification("110503671231001"));//true}
}
正则的两个常用方法
1.是否匹配  Pattern.matches(reg,name)      //return true,false
2. 正则筛选的字符串
String re_fifteen = "^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$";Pattern p = Pattern.compile(re_fifteen);Matcher arr_data = p.matcher(idCard);while (arr_data.find()) {int year = Integer.parseInt("19"+arr_data.group(2));int month = Integer.parseInt(arr_data.group(3));int day = Integer.parseInt(arr_data.group(4));Calendar birthday = Calendar.getInstance();birthday.set(year,month-1,day);return verifyBirthday(year, month, day, birthday);}

js前端验证

layui.use(['form', 'element', 'layer', 'jquery'], function () {var $ = layui.jquery;var form = layui.form;//自定义验证规则form.verify({orderName: function (value) {if (value.length < 1) {return '姓名不能为空';}if (!checkTrueName(value)) {return '请输入真实姓名';}},orderPhone: function (value) {if (value.length < 1) {return '手机号码不能为空';}if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(value))) {return "请输入有效的手机号码";}}, orderIdCard: function (value) {if (value.length < 1) {return '身份证不能为空';}if (!checkCard(value)) {return '请输入有效的身份证!';}}});form.on('submit(formDemoGO)', function (data) {var index = layer.load();$.ajax({url: "mask/order?entryId="+ new Date().getTime(),data : JSON.stringify(data.field),dataType: 'json',contentType: "application/json;charset-UTF-8",type:  'post',success: function(result){var msg = result.msg;if(msg == null ){msg="";}var state = result.state;if(state == null ){state="";}layer.close(index);if(1==state){window.location.href = '/successView?oaprPickStartTime='+result.userInfo.oaprPickStartTime+'&oaprPickEndTime='+result.userInfo.oaprPickEndTime+'&storeUuid='+result.storeInfo.uuid+'&userId='+result.userInfo.oaprUuid;}else{window.location.href = '/errorView?state='+state+'&msg='+msg+'&isSuccess='+result.isSuccess;}},error:function(){layer.close(index);window.location.href = '/errorView?state=4&msg=系统繁忙,请稍候!&isSuccess=false';}});return false;});
});function checkTrueName(str) {var reg= /^(([a-zA-Z+\.?\·?a-zA-Z+]{2,30}$)|([\u4e00-\u9fa5+\·?\u4e00-\u9fa5+]{2,30}$))/;//判断用户输入的真实姓名是否为空if(str.length>20){return false;}if(str.length==0){return false;}//检测姓名的格式是否匹配else if(!reg.test(str)){return false;}else {return true;}} var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",  21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",  33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",  42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",  51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",  63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"  };  function checkCard(card)
{  //是否为空  if(card === '')  {  return false;  }  //校验长度,类型  if(isCardNo(card) === false)  {  return false;  }  //检查省份  if(checkProvince(card) === false)  {  return false;  }  //校验生日  if(checkBirthday(card) === false)  {  return false;  }  //检验位的检测  if(checkParity(card) === false)  {  return false;  }  return true;
};  //检查号码是否符合规范,包括长度,类型
isCardNo = function(card)
{  //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;  if(reg.test(card) === false)  {  return false;  }  return true;
};  //取身份证前两位,校验省份
checkProvince = function(card)
{  var province = card.substr(0,2);  if(vcity[province] == undefined)  {  return false;  }  return true;
};  //检查生日是否正确
checkBirthday = function(card)
{  var len = card.length;  //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字  if(len == '15')  {  var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;  var arr_data = card.match(re_fifteen);  var year = arr_data[2];  var month = arr_data[3];  var day = arr_data[4];  var birthday = new Date('19'+year+'/'+month+'/'+day);  return verifyBirthday('19'+year,month,day,birthday);  }  //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X  if(len == '18')  {  var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;  var arr_data = card.match(re_eighteen);  var year = arr_data[2];  var month = arr_data[3];  var day = arr_data[4];  var birthday = new Date(year+'/'+month+'/'+day);  return verifyBirthday(year,month,day,birthday);  }  return false;
};  //校验日期
verifyBirthday = function(year,month,day,birthday)
{  var now = new Date();  var now_year = now.getFullYear();  //年月日是否合理  if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)  {  //判断年份的范围(3岁到100岁之间)  var time = now_year - year;  if(time >= 3 && time <= 100)  {  return true;  }  return false;  }  return false;
};  //校验位的检测
checkParity = function(card)
{  //15位转18位  card = changeFivteenToEighteen(card);  var len = card.length;  if(len == '18')  {  var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  var cardTemp = 0, i, valnum;  for(i = 0; i < 17; i ++)  {  cardTemp += card.substr(i, 1) * arrInt[i];  }  valnum = arrCh[cardTemp % 11];  if (valnum == card.substr(17, 1))  {  return true;  }  return false;  }  return false;
};  //15位转18位身份证号
changeFivteenToEighteen = function(card)
{  if(card.length == '15')  {  var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  var cardTemp = 0, i;    card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);  for(i = 0; i < 17; i ++)  {  cardTemp += card.substr(i, 1) * arrInt[i];  }  card += arrCh[cardTemp % 11];  return card;  }  return card;
};

常用工具类(一) 身份证+姓名+手机号码验证相关推荐

  1. Java 常用工具类 - 校验身份证 IdCardUtils

    身份证校验工具类 IdCardUtils import org.apache.commons.lang3.StringUtils;import java.text.ParseException; im ...

  2. javascript 总结(常用工具类的封装)(转)

    转载地址:http://dzblog.cn/article/5a6f48afad4db304be1e7a5f javascript 总结(常用工具类的封装) JavaScript 1. type 类型 ...

  3. javascript 总结(常用工具类的封装,转)

    javascript 总结(常用工具类的封装) 前言 因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字 ...

  4. javascript常用工具类整理(copy)

    JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串return Object.prototype.toS ...

  5. 【JavaScript学习】JavaScript 常用工具类封装

    文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...

  6. Hutool常用工具类

    Hutool常用工具类 介绍 安装 1. maven 2. gradle 常用工具类 1. 类型转换工具类-Convert 2. 日期时间工具-DateUtil 转换 字符串转日期 格式化日期输出 获 ...

  7. Android 常用工具类转换

    Android 常用单位转换的工具类 1. 常用单位转换的工具类 /*** 常用单位转换的工具类*/ public class ViewUtil {private ViewUtil() {/** ca ...

  8. Android 项目必备(九)--> 项目常用工具类

    文章目录 AppUtils.java DeviceUtils.java NetUtils.java DateUtil.java DensityUtil.java FileUtils.java Stri ...

  9. JAVA常用工具类(实用高效)

    JAVA常用工具类(根据GITHUB代码统计) 从Google你能搜索到大量的关于Struts,Spring,Hibernate,iBatis等比较大的框架的资料,但是很少有人去关注一些小的工具包,但 ...

最新文章

  1. 代码 抠图_Python装逼指南——五行代码实现批量抠图!
  2. R语言:怎么进行异常检测
  3. java 无符号 类型_java中符号类型和无符号类型的问题分析
  4. Item9:总是要改写toString
  5. [css] 让你手写一个reset的文件,你应该怎么写?要考虑哪些方面呢?
  6. lgg6 android 9,LG G6的18:9屏幕用起来到底是什么样
  7. python中bool函数的用法_python3实战python函数每日一讲 - bool([x])
  8. python基础-深浅拷贝
  9. 批处理等待上一条完成再执行下面的_分布式批处理实现方案
  10. 浅谈算法和数据结构: 九 平衡查找树之红黑树
  11. SOAPUI接口测试http协议详细测试过程
  12. Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI)
  13. webrtc视频码率计算
  14. 2018 6 11 没有触角的蚂蚁
  15. 运维(1) Jenkinsfile+Dockerfile+Nginx实现前端Vue自动化部署
  16. 进阶三部曲第一部《Android进阶之光》第2版已出版
  17. Element 基本使用
  18. 微信小程序源码删除解决办法解包
  19. Java IO用法详解
  20. D3D12渲染技术之帧资源

热门文章

  1. 计算机教室突发事件处理,课堂突发事件处理
  2. 音乐计算机研修心得,音乐教师研修总结报告
  3. kruskalCase克鲁斯卡尔算法
  4. C++基础编程题(28)猴子吃桃问题
  5. 兼容性问题:安卓正常,ios报错invalid group specifier name
  6. PaddleNLP系列课程一:Taskflow、小样本学习、FasterTransformer
  7. [数分提高]2014-2015-2第6教学周第1次课讲义 3.3 Taylor 公式
  8. 数据可视化之小提琴图(原理+Python代码)
  9. 已删除的照片怎么找回?怎么找回相册中被删除的照片
  10. CrawlSpider实现微信小程序社区爬虫【python爬虫入门进阶】(18)