JAVA 身份证号和手机号、数字、区间范围相关工具

这篇具有很好参考价值的文章主要介绍了JAVA 身份证号和手机号、数字、区间范围相关工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

身份证号和手机号、数字相关工具

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Validation {

    //数字表达式
    private final static Pattern number_pattern = Pattern.compile("^[0-9]*$");

    /**
     * 验证是数字
     * @param str 验证字符
     * @return boolean
     */
    public static boolean isNumber(String str) {
        return number_pattern.matcher(str).matches();
    }

    /**
     * 验证身份证号码是否正确
     * @param IDCardNo 身份证号码
     * @return boolean
     */
    public static String isIDCard(String IDCardNo) {
        if(IDCardNo.indexOf("X") != -1){
            IDCardNo = IDCardNo.replace("X", "x");
        }
        //记录错误信息
        String errmsg = "";
        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 = "";

        //================ 身份证号码的长度 15位或18位 ================
        if (IDCardNo.length() != 15 && IDCardNo.length() != 18) {
            errmsg = "身份证号码长度应该为15位或18位!";
            return errmsg;
        }

        //================ 数字 除最后以为都为数字 ================
        if (IDCardNo.length() == 18) {
            Ai = IDCardNo.substring(0, 17);
        } else if (IDCardNo.length() == 15) {
            Ai = IDCardNo.substring(0, 6) + "19" + IDCardNo.substring(6, 15);
        }
        if (isNumber(Ai) == false) {
            errmsg = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字";
            return errmsg;
        }

        //================ 出生年月是否有效 ================
        //年份
        String strYear = Ai.substring(6, 10);
        //月份
        String strMonth = Ai.substring(10, 12);
        //日
        String strDay = Ai.substring(12, 14);
        if (DateUtils.getDateIsTrue(strYear, strMonth, strDay) == false) {
            errmsg = "身份证生日无效";
            return errmsg;
        }
        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) {
                errmsg = "身份证生日不在有效范围";
                return errmsg;
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
            errmsg = "身份证生日不在有效范围";
            return errmsg;
        } catch (java.text.ParseException e1) {
            e1.printStackTrace();
            errmsg = "身份证生日不在有效范围";
            return errmsg;
        }
        if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
            errmsg = "身份证月份无效";
            return errmsg;
        }
        if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
            errmsg = "身份证日期无效";
            return errmsg;
        }

        //================ 地区码时候有效 ================
        if (getAreaCodeAll().get(Ai.substring(0, 2)) == null) {
            errmsg = "身份证地区编码错误";
            return errmsg;
        }

        //================ 判断最后一位的值 ================
        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];
        Ai = Ai + strVerifyCode;
        if (IDCardNo.length() == 18) {
            if (Ai.equals(IDCardNo) == false) {
                errmsg = "身份证无效,不是合法的身份证号码";
                return errmsg;
            }
        } else {
            return errmsg;
        }
        return errmsg;
    }

    /**
     * 获取身份证号所有区域编码设置
     * @return Hashtable
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static Hashtable getAreaCodeAll() {
        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;
    }

    /**
     * 验证手机号码是否正确
     * @param phone
     * @return
     */
    public static  boolean isPhone(String phone){
        //正则表达式
        String phoneRegEx = "^1(3|4|5|6|7|8|9)\\d{9}$";
        //函数语法 匹配的正则表达式
        Pattern pattern = Pattern.compile(phoneRegEx);
        //进行匹配
        Matcher matcher = pattern.matcher(phone);

        if (!matcher.matches()) {//校验手机号格式是否正确,若是匹配成功则返回true
            System.out.println("手机号格式错误");
        }
        return matcher.matches();
    }

    /**
     * 根据身份证号获取年龄
     * @param sfzh
     * @return
     */
    public static String evaluate(String sfzh){
        if(sfzh== null || "".equals(sfzh) ){
            return "身份证件号有误,无法计算年龄";
        }

        if (sfzh.length() != 15 && sfzh.length() != 18){
            return "身份证件号有误,无法计算年龄";
        }

        String age="身份证件号有误,无法计算年龄";

        if(sfzh!= "身份证件号有误"){

            Calendar cal = Calendar.getInstance();
            int yearNow = cal.get(Calendar.YEAR);
            int monthNow = cal.get(Calendar.MONTH)+1;
            int dayNow = cal.get(Calendar.DATE);

            int year = Integer.valueOf(sfzh.substring(6, 10));
            int month = Integer.valueOf(sfzh.substring(10,12));
            int day = Integer.valueOf(sfzh.substring(12,14));

            if ((month < monthNow) || (month == monthNow && day<= dayNow) ){
                age = String.valueOf(yearNow - year);
            }else {
                age = String.valueOf(yearNow - year-1);
            }
        }
        return age;
    }
/**
     * 判断某个数值是否在某个区间
     * @param number 需判断的数值
     * @param minValue 最小值
     * @param maxValue 最大值
     * @return 结果
     */
    public static boolean isInRange(int number, int minValue, int maxValue) {
        return (number >= minValue && number <= maxValue);
    }
}

文章来源地址https://www.toymoban.com/news/detail-815137.html

到了这里,关于JAVA 身份证号和手机号、数字、区间范围相关工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue正则验证:邮箱,手机号,身份证,IP,MAC,微信号等

    数字正则表达式

    2024年02月13日
    浏览(40)
  • uniapp、vue、小程序常用的一些验证规则校验方法(例如:手机号。身份证、金额等)

    例如: 检查是否为空数组 、是否是空  不为空false 为空true、校验密码、校验手机号格式、校验邮箱格式、校验身份证号格式、校验值长度 不少于6位数、 电话号码加密   15288889999 转化为 152****9999、身份证号码加密、验证输入重量、金额等类型   例如 0.11  2.23  100.123等等

    2024年02月02日
    浏览(34)
  • 记录--用js如何实现将手机号中间的几位数字变成****

    这个功能其实很常见,比如我们微信的账号安全里面显示的手机号、掘金的账号设置里面显示的手机号、支付宝里面的证件号码、各大银行的App卡号.....还有很多有关系到我们私密的地方,在此就不一一例举了,看似简单的功能,我们该如何实现呢? 其实实现的方法有很多,

    2024年02月08日
    浏览(34)
  • 前端Vue手机号校验及后端Java手机号校验

    大家好! 今天给大家分享的知识是前端Vue手机号校验以及后端Java进行手机号校验,这两个也是我在开发过程中遇到的问题,现在来给大家分享一下我的解决办法。 在这里我写了一个很简单的小例子,大家可以参考一下,在此基础上进行改进,代码如下: 关键代码都有注释,

    2024年02月04日
    浏览(33)
  • java—手机号脱敏

    Java中手机号脱敏是指将真实手机号码中的一部分数字用特定字符替换,以保护用户的个人信息。通常,手机号码脱敏会将手机号的中间几位或者最后几位替换成特定字符,例如用“*”、\\\"X\\\"或者其他随意选择的字符来代替。 手机号脱敏的目的是防止用户个人信息外泄。在互联

    2024年02月11日
    浏览(30)
  • Java - 微信小程序授权手机号登录

            最近做了一个关于商城的项目,B端选用若依的开源框架,C端还是vue前后端分离。其中C端主要是小程序的形式,所以想着来总结一下对接微信小程序登录中Java部分遇到的坑即代码分享! 废话不多说,直接上代码! 1、controller 层代码          入参我这边是直接使用

    2024年02月04日
    浏览(36)
  • 微信小程序——获取用户手机号(Java后台)

    最后有完整代码 1、获取code 2、利用code获取sessionkey 小程序端: Java后台: 获取小程序密钥:微信公众平台-开发管理-开发设置 3、获取iv和encryptedData并解密获取手机号 java后台: 如果报错40029则可能是appid不对 4、完整代码 wxml: wxss: js: Java后台

    2024年02月12日
    浏览(45)
  • 微信小程序: java实现获取手机号方式

    目录 1. 现在比较简单的方式 - 接口名 --- 功能描述 - 调用方式 --- HTTPS 调用 --- 第三方调用 --- 请求参数 --- 返回参数 2. 实现方式 1. 加入fastjson依赖  2. http请求类 3. Json串工具类 4.接口方法 3.另外介绍一点access_token 微信官方文档介绍:  getPhoneNumber --- 功能描述 该接口需配合手机

    2024年02月16日
    浏览(53)
  • 微信小程序获取手机号登录(Java后端)

    1.前端请求getPhoneNumber方法获取code传给后端接口; 2.后端接口通过配置的appid、secretKey请求接口https://api.weixin.qq.com/cgi-bin/token获取access_token参数; 3.后端通过参数code和参数access_token,去请求接口https://api.weixin.qq.com/wxa/business/getuserphonenumber来获取手机号。

    2024年02月11日
    浏览(52)
  • java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)

    快手小程序官网地址 快手小程序后台配置回调域名 KSUrlConstants(请求地址常量) 商品类目编号 根据业务自行替换 RestTemplateUtil (rest发送请求工具类) KsUtil 支付前需要先获取到用户的openId,用户openId参与支付签名 支付前需要先获取到支付权限的access_token access_token 在支付 结算

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包