校验工具类


import com.xx.xx.dic.CertificateType;/*** 证件类型校验工具类*/
public class CertificateValidateUtil {public static String validate(String xm, String xb, String zjlx, String zjhm, String csrq) {//1.基于证件号码编码规则进行校验//1.1 若证件号码符合身份证编码规则,校验证件号码前两位和证件类型;if (ValidatorUtil.isSfzh(zjhm)) {int theFirstTwo = Integer.parseInt(zjhm.substring(0, 2));//前两位小于等于65、但证件类型不是“居民身份证”或“居民户口簿”,报错:证件类型与证件号码不一致(证件号码符合[居民身份证]编码规则);if (theFirstTwo <= 65 && !CertificateType.JMSFZ.getCode().equals(zjlx) && !CertificateType.JMHKB.getCode().equals(zjlx)) {return "E00_证件类型与证件号码不一致(证件号码符合[居民身份证]编码规则)";}//前两位为81、82,但证件类型不是“港澳居民居住证”,报错:证件类型与证件号码不一致(证件号码符合[港澳居民居住证]编码规则);if ((theFirstTwo == 81 || theFirstTwo == 82) && !CertificateType.GAJMJZZ.getCode().equals(zjlx)) {return "E00_证件类型与证件号码不一致(证件号码符合[港澳居民居住证]编码规则)";}//前两位为83,但证件类型不是“台湾居民居住证”,报错:证件类型与证件号码不一致(证件号码符合[台湾居民居住证]编码规则);if (theFirstTwo == 83 && !CertificateType.TWJMJZZ.getCode().equals(zjlx)) {return "E00_证件类型与证件号码不一致(证件号码符合[台湾居民居住证]编码规则)";}}//1.2若证件号码不符合身份证编码规则,校验长度,首字母,第2-8位,证件类型;if (!isSfzh(zjhm)) {// 长度为9、第1位为英文字符“H”或“M”,第2-8位是数字,但证件类型不是“港澳居民来往内地通行证”,报错:证件类型与证件号码不一致(证件号码符合[港澳居民来往内地通行证]特征);if (zjhm.length() == 9) {char theFirst = zjhm.charAt(0);String theTwo2Eight = zjhm.substring(1, 8);if ((theFirst == 'H' || theFirst == 'M') && ValidatorUtil.isNumber(theTwo2Eight) && !CertificateType.GAJMLWNDTXZ.getCode().equals(zjlx)) {return "E00_证件类型与证件号码不一致(证件号码符合[港澳居民来往内地通行证]特征)";}}//长度为8、纯数字、与出入境接口“台湾居民来往大陆通行证”比对一致,但证件类型不是“台湾居民来往大陆通行证”,报错:证件类型与证件号码不一致(证件号码符合[台湾居民来往大陆通行证]特征);if (zjhm.length() == 8 && ValidatorUtil.isNumber(zjhm) && !CertificateType.TWJMLWNDTXZ.getCode().equals(zjlx)) {return "E00_证件类型与证件号码不一致(证件号码符合[台湾居民来往大陆通行证]特征)";}}//2基于证件类型与证件号码、姓名、出生日期、性别进行关联校验//2.1若证件类型为居民身份证或居民户口簿if (CertificateType.JMSFZ.getCode().equals(zjlx) || CertificateType.JMHKB.getCode().equals(zjlx)) {//若证件号码不符合身份证编码规则或证件号码前两位大于65,报错:证件号码不规范(不符合[居民身份证编码]规则);if (!isSfzh(zjhm)) {return "E00_证件号码不规范(不符合[居民身份证编码]规则)";}int theFirstTwo = Integer.valueOf(zjhm.substring(0, 2));if (theFirstTwo > 65) {return "E00_证件号码不规范(不符合[居民身份证编码]规则)";}//若证件号码符合身份证编码规则,证件号码前两位小于等于65,但姓名不符合中文规范(只能包含汉字、中间分隔符'·'或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}//证件号码前两位小于等于65,但证件号码第7 - 14 位与出生日期不一致,报错:出生日期与证件号码不一致;String theSeven2Twelve = zjhm.substring(6, 14);if (!theSeven2Twelve.equals(csrq)) {return "E00_出生日期与证件号码不一致";}//证件号码前两位小于等于65,但证件号码第17位与性别不一致,报错:性别与证件号码不一致;int theSeventeen = Integer.valueOf(zjhm.charAt(16));if (!((theSeventeen % 2 == 0 && xb.equals("女")) || (theSeventeen % 2 != 0 && xb.equals("男")))) {return "E00_性别与证件号码不一致";}}//2.2若证件类型为港澳居民居住证if (CertificateType.GAJMJZZ.getCode().equals(zjlx)) {//若证件号码不符合身份证编码规则或证件号码前六位不是810000、820000,报错:证件号码不规范(不符合[港澳居民居住证]编码规则);if (!isSfzh(zjhm)) {return "E00_证件号码不规范(不符合[港澳居民居住证]编码规则)";}String theFirstSix = zjhm.substring(0, 6);if (!theFirstSix.equals("810000") && !theFirstSix.equals("820000")) {return "E00_证件号码不规范(不符合[港澳居民居住证]编码规则)";}//若证件号码符合身份证编码规则且证件号码前六位是810000或820000//姓名不符合中文规范(只能包含汉字、中间分隔符'·'或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}//证件号码第7-14位与出生日期不一致,报错:出生日期与证件号码不一致;String theSeven2Twelve = zjhm.substring(6, 14);if (!theSeven2Twelve.equals(csrq)) {return "E00_出生日期与证件号码不一致";}//证件号码第17位与性别不一致,报错:性别与证件号码不一致;int theSeventeen = Integer.valueOf(zjhm.charAt(16));if (!((theSeventeen % 2 == 0 && xb.equals("女")) || (theSeventeen % 2 != 0 && xb.equals("男")))) {return "E00_性别与证件号码不一致";}}//3.若证件类型为台湾居民居住证if (CertificateType.TWJMJZZ.getCode().equals(zjlx)) {//3.1若证件号码不符合身份证编码规则或证件号码前六位不是830000,报错:证件号码不规范(不符合[台湾居民居住证]编码规则);if (!isSfzh(zjhm)) {return "E00_证件号码不规范(不符合[台湾居民居住证]编码规则)";}String theFirstSix = zjhm.substring(0, 6);if (!theFirstSix.equals("830000")) {return "E00_证件号码不规范(不符合[台湾居民居住证]编码规则)";}//若证件号码符合身份证编码规则且证件号码前六位是830000//姓名不符合中文规范(只能包含汉字、中间分隔符 '·' 或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}//若证件号码符合身份证编码规则且证件号码前六位是830000,但证件号码第7 - 14 位与出生日期不一致,报错:出生日期与证件号码不一致;String theSeven2Twelve = zjhm.substring(6, 14);if (!theSeven2Twelve.equals(csrq)) {return "E00_出生日期与证件号码不一致";}//若证件号码符合身份证编码规则且证件号码前六位是830000,但证件号码第17位与性别不一致,报错:性别与证件号码不一致;int theSeventeen = Integer.valueOf(zjhm.charAt(16));if (!((theSeventeen % 2 == 0 && xb.equals("女")) || (theSeventeen % 2 != 0 && xb.equals("男")))) {return "E00_性别与证件号码不一致";}}//4.若证件类型为港澳居民来往内地通行证if (CertificateType.GAJMLWNDTXZ.getCode().equals(zjlx)) {//若证件号码不符合证件特征(长度为9、第1位为英文字符“H”或“M”,第2-8位是数字),报错:证件号码不规范(与[港澳居民来往内地通行证]证件特征不符);if (zjhm.length() != 9) {return "E00_证件号码不规范(与[港澳居民来往内地通行证]证件特征不符)";}char theFirst = zjhm.charAt(0);String theTwo2Eight = zjhm.substring(1, 8);if ((theFirst != 'H' && theFirst != 'M') || !ValidatorUtil.isNumber(theTwo2Eight)) {return "E00_证件号码不规范(与[港澳居民来往内地通行证]证件特征不符)";}//若姓名不符合中文规范(只能包含汉字、中间分隔符'·'或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}}//5.若证件类型为台湾居民来往大陆通行证if (CertificateType.TWJMLWNDTXZ.getCode().equals(zjlx)) {//若证件号码不符合证件特征(长度为8、纯数字),报错:证件号码不规范(与[台湾居民来往大陆通行证]证件特征不符);if (zjhm.length() != 8 || !ValidatorUtil.isNumber(zjhm)) {return "E00_证件号码不规范(与[台湾居民来往大陆通行证]证件特征不符)";}//若姓名不符合中文规范(只能包含汉字、中间分隔符'·'或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}}//6.若证件类型为境外永久居住证或外国人永久居留身份证if (CertificateType.JWYJJZZ.getCode().equals(zjlx) || CertificateType.WGRYJJLSFZ.getCode().equals(zjlx)) {//若姓名不符合中文规范,也不符合英文规范(必须是大写英文字母,中间分隔符允许空格),报错:姓名不规范;if (!isGoodChineseName(xm) && !isEnglishName(xm)) {return "E00_姓名不规范";}}//7.若证件类型为护照或其他if (CertificateType.HZ.getCode().equals(zjlx) || CertificateType.QT.getCode().equals(zjlx)) {//若姓名不符合中文规范(只能包含汉字、中间分隔符'·'或大写拼音字母),报错:姓名不规范;if (!isGoodChineseName(xm)) {return "E00_姓名不规范";}}return "";}
}

证件类型枚举


import org.apache.commons.lang.StringUtils;public enum CertificateType {JMSFZ("居民身份证", "1"), JMHKB("居民户口簿", "B"), GAJMJZZ("港澳居民居住证", "D"),TWJMJZZ("台湾居民居住证", "E"), GAJMLWNDTXZ("港澳居民来往内地通行证", "Y"), TWJMLWNDTXZ("台湾居民来往大陆通行证", "8"),JWYJJZZ("境外永久居住证", "9"), WGRYJJLSFZ("外国人永久居留身份证", "F"), HZ("护照", "A"), QT("其他", "Z");private String name;private String code;CertificateType(String name, String code) {this.name = name;this.code = code;}public String getName() {return name;}public String getCode() {return code;}public static CertificateType getByName(String name) {if (StringUtils.isBlank(name)) {return QT;} else {CertificateType[] items = values();for (CertificateType item : items) {if (item.getName().equals(name)) {return item;}}return QT;}}public static CertificateType getByCode(String code) {if (StringUtils.isBlank(code)) {return QT;} else {CertificateType[] items = values();for (CertificateType item : items) {if (item.getCode().equals(code)) {return item;}}return QT;}}
}

身份证规则校验

public static boolean isSfzh(String sfzh) {return StringUtils.isBlank(sfzh) ? false : contains(sfzh, "(^\\d{15}$)|(^(\\d){17}([\\d|X|x|x|X])$)");}

中文英文姓名校验

/*** 中文姓名:必须是汉字、大写字母和“·”的组合,“·”不能在姓名的首尾* @param xm* @return*/public static boolean isGoodChineseName(String xm) {if (StringUtils.isBlank(xm)) {return false;}if (xm.startsWith("·") || xm.endsWith("·")) {return false;}String str = xm.replaceAll("[\u4e00-\u9fa5A-Z·]", "");if (str.length() > 0) {//return false;}return true;}/*** 英文姓名:应为大写字母,中间允许1个空格,允许有英文逗号* @param xm* @return*/public static boolean isGoodEnglishName(String xm) {if (StringUtils.isBlank(xm)) {return false;}Pattern p = Pattern.compile("[\\s]{2,}");Matcher m = p.matcher(xm);if (m.find()) {return false;}String str = xm.replaceAll("[A-Z,\\s]", "");return str.length() == 0;}

证件类型、证件号码、性别、出生日期校验(身份证、户口簿、港澳居民居住证、台湾居民居住证、港澳居民来往内地通行证、台湾居民来往大陆通行证、境外永久居住证、外国人永久居留身份证、护照、其他)相关推荐

  1. JAVA 证件类型+证件号码校验(计算)

    //定于返回对象 及返回对象定于 WebLogUtil.addInfoLog("222222222"); List<Map<String,Object>> ...

  2. 用表格完成个人信息网页的设计 基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像兴趣爱好

    用表格完成个人信息网页的设计 1. 要求: (1)基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像. (2)除了基本信息外,至少100字介绍 ...

  3. 证件类型为身份证号时进行身份证校验

    需求:代办人身份证号改为代办人证件类型(默认为身份证号),后面跟着号码,房主和代办人的证件类型为身份证号时进行身份证校验 效果: sf_ghgl_add.jsp <td class=" ...

  4. 使用表单完成完成个人信息网页的设计 基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像

    1.使用表单完成完成个人信息网页的设计 2.基本信息有:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像 3.效果图 如下(没有用div划分区域做的有 ...

  5. el-select下拉框不同证件类型校验思路

    vue+element ui 需求: 分为个人证件类型和企业证件类型,例如个人的:身份证.户口本.护照等,企业的:组织机构代码.统一社会信用代码.根据选择不同的证件类型需要有相对应的证件号码校验规则 ...

  6. 各类证件类型的格式校验

    1.身份证校验 function isCardID(sId) {var that = this;var aCity = {11: "北京",12: "天津",1 ...

  7. java,证件类型枚举

    import cn.hutool.core.util.StrUtil;/*** 证件类型枚举** @author yi_sao* @date 2022/9/27*/ public enum CardT ...

  8. 团体的证件类型三证合一

    团体的证件类型三证合一 国税税务登记证号.地税税务登记证号和统一社会信用代码在三证合一之后,是一个号码了.三证合一是将企业依次申请的工商营业执照.组织机构代码证和税务登记证三证合为一证,实行一照一码. ...

  9. 《JAVA练习题目8》 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number

    题目内容: 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number:方法:showMe,以"name-gende ...

最新文章

  1. 计算机书籍-Linux内核 入门篇
  2. 14种常见HTTP状态码
  3. python饼状图顺时针_Python matplotlib顺时针饼图
  4. 对愤怒小鸟首席美术设计Ellinoora的访谈
  5. oracle 动态注册和静态注册
  6. 小白也能看懂!教你如何快速搭建实用的爬虫管理平台
  7. MySQL 获取首次登录日期、登录设备号
  8. Jsp+Servlet+Mysql实现的二手物品在线商城源码
  9. 机器学习常用损失函数
  10. mediacodec编解码少帧问题
  11. 华为USG防火墙配置
  12. 【Mac】微信视频对方听不见你的声音
  13. Android 虚拟机技术为何至今依旧“屹立不倒”?
  14. 空间数据管理问题及解决方案
  15. HDU 1002 A+BII大数
  16. Linux服务器上测试TCP/UDP端口的连通性
  17. Echarts-- 圆环图2.0
  18. 再谈模拟器上网!!(Symbian OS S60)(转)
  19. 锂电池充放电电路设计与分析
  20. uni-app 小程序分段器tab 的 实现

热门文章

  1. 【RMAN】数据库备份之冷备份
  2. 服务器端 P44、25-42
  3. 【FFmpeg】avg_frame_rate 计算 及在TS 中使用
  4. 行业分析-全球与中国抛光混凝土地板市场现状及未来发展趋势
  5. AI中英文翻译软件,一键批量多语种翻译
  6. 简单关键字中英文翻译机代码~
  7. 深度学习网络中backbone是什么意思
  8. HNUST--2187 最小生成树(邻接矩阵或邻接表)
  9. [转载]《武林外传》每一集都教会我们一个道理
  10. Java17线程进程