java身份证、手机号、邮箱正则校验工具类

简介: java身份证、手机号、邮箱正则校验工具类
package myjava;
/**
 * 通用的正则校验
 *
 * @author zhangfuzeng
 * @date 2021/11/19
 */
public class RegularUtil {
    private RegularUtil() {
    }
    /**
     * 身份证校验,支持15位和18位身份证校验
     *
     * @param idNumber 身份证号
     * @return true:校验通过  false:校验未通过
     */
    public static boolean checkIdNumber(String idNumber) {
        if (idNumber == null || "".equals(idNumber)) {
            return false;
        }
        // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
        // 假设18位身份证号码:41000119910101123X  410001 19910101 123X
        // ^开头
        // [1-9] 第一位1-9中的一个         4
        // \\d{5} 五位数字                10001(前六位省市县地区)
        // (18|19|20)                    19(现阶段可能取值范围18xx-20xx年)
        // \\d{2}                        91(年份)
        // ((0[1-9])|(10|11|12))         01(月份)
        // (([0-2][1-9])|10|20|30|31)    01(日期)
        // \\d{3} 三位数字                123(第十七位奇数代表男,偶数代表女)
        // [0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
        // $结尾
        // 
        // |代表或者,走18位或15位的规则
        // 
        // 假设15位身份证号码:410001910101123  410001 910101 123
        // ^开头
        // [1-9] 第一位1-9中的一个       4
        // \\d{5} 五位数字              10001(前六位省市县地区)
        // \\d{2}                      91(年份)
        // ((0[1-9])|(10|11|12))       01(月份)
        // (([0-2][1-9])|10|20|30|31)  01(日期)
        // \\d{3} 三位数字              123(第十五位奇数代表男,偶数代表女),15位身份证不含X
        // $结尾
        String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
                "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
        boolean matches = idNumber.matches(regularExpression);
        // 判断第18位校验值
        int idNumberLength = 18;
        if (matches && idNumber.length() == idNumberLength) {
            try {
                char[] charArray = idNumber.toCharArray();
                // 前十七位加权因子
                int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
                // 这是除以11后,可能产生的11位余数对应的验证码
                String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
                int sum = 0;
                for (int i = 0; i < idCardWi.length; i++) {
                    int current = Integer.parseInt(String.valueOf(charArray[i]));
                    int count = current * idCardWi[i];
                    sum += count;
                }
                char idCardLast = charArray[17];
                int idCardMod = sum % 11;
                return idCardY[idCardMod].equalsIgnoreCase(String.valueOf(idCardLast));
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        return matches;
    }
    /**
     * 手机号校验,支持11位手机号校验
     *
     * @param phoneNumber 手机号
     * @return true:校验通过  false:校验未通过
     */
    public static boolean checkPhoneNumber(String phoneNumber) {
        if (phoneNumber == null || "".equals(phoneNumber)) {
            return false;
        }
        // ^        开头
        // 1        以1开头
        // [3-9]    第二位可以为3/4/5/6/7/8/9的任意一个
        // \\d{9}   加上后面的9位数字,总共为11位数字
        // $        结尾
        String regularExpression = "^1[3-9]\\d{9}$";
        try {
            return phoneNumber.matches(regularExpression);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 验证邮箱
     *
     * @param email 邮箱
     * @return true:校验通过  false:校验未通过
     */
    public static boolean checkEmail(String email) {
      if (email == null || "".equals(email)) {
            return false;
        }
        String regularExpression = "^([a-z0-9A-Z]+[-|_.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        try {
            return email.matches(regularExpression);
        } catch (Exception e) {
          e.printStackTrace();
            return false;
        }
    }
}
目录
相关文章
|
9月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
314 0
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
945 5
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
225 1
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
898 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
算法 Java
java生成一个随机的身份证号
【10月更文挑战第5天】java生成一个随机的身份证号
1064 1
|
Java
Java 些许公共工具类
Java 些许公共工具类
99 1
|
Java 数据库连接 测试技术
自定义校验注解,优雅的实现手机号,身份证号的格式校验!
本文介绍了如何创建自定义校验注解来实现手机号和身份证号的格式校验,包括定义注解、实现校验逻辑、将注解应用于模型类,以及常用的校验器库和框架,旨在提高代码的可维护性和减少重复的校验逻辑。
|
JavaScript 前端开发
在url中取ip或者键值对、手机号脱敏、电话号脱敏、身份证脱敏、银行卡号脱敏、身份证校验
本文提供了JavaScript代码示例,用于从URL中提取IP地址、键值对,以及对手机号、电话号码、身份证号和银行卡号进行脱敏处理,还包含了身份证号的校验方法。
308 0
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
242 8
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
201 1