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;
        }
    }
}
目录
相关文章
|
11月前
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
754 5
|
JavaScript NoSQL Redis
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
这篇文章记录了在Vue中实现修改手机号和邮箱的大致流程,包括使用过滤器部分隐藏展示的手机号和邮箱,以及通过点击触发路由跳转的便捷方式。文章还描述了旧号码和新号码验证的界面实现,其中验证码由后端生成并通过弹窗展示给用户,未来可以接入真正的手机验证码接口。此外,还提供了修改邮箱的页面效果截图,并强调了学习是一个永无止境的过程。
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
|
6月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
192 0
|
JavaScript 数据安全/隐私保护
Vue中如何使用过滤器来隐藏手机号、邮箱等字符串的中间部分内容
这篇文章介绍了在Vue中如何使用过滤器来隐藏手机号和邮箱等字符串的中间部分内容,以提高隐私保护。文章展示了实现效果,并提供了实现过程的代码示例,包括HTML部分的绑定、data部分的数据定义和script部分的过滤器定义。文章还解释了过滤器的概念、语法和使用方式,并提供了一个外部链接供读者获取更加详细的过滤器知识。
|
8月前
|
SQL Java 数据库连接
如何用 Java 校验 SQL 语句的合法性?
本文介绍了五种校验 SQL 语句合法性的方案:1) 使用 JDBC API 的 `execute()` 方法,通过捕获异常判断合法性;2) 使用 JSqlParser 库解析 SQL 语句为 Java 对象;3) 使用正则表达式检查 SQL 语句格式;4) 使用 ANTLR 生成 SQL 解析器;5) 使用 Apache Calcite 解析 SQL。每种方法各有优劣,具体选择取决于需求和个人偏好。需要注意的是,这些方法仅能校验语法合法性,无法保证语义正确性,仍需防范 SQL 注入攻击。
291 6
|
11月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
130 1
|
11月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
653 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
11月前
|
算法 Java
java生成一个随机的身份证号
【10月更文挑战第5天】java生成一个随机的身份证号
845 1
|
11月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
64 1
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
84 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)