java(身份证号,手机号等)验证总结

硅谷探秘者 2072 0 0

验证

package com.dzqc.dz.main.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证
 * @author Administrator
 *
 */
public class J {
	
    private static final byte MALE = 1;
    private static final byte FAMALE = 0;

    /**
     * 检验身份证是否合法
     * @return 1-合法;0-不合法
     */
    public static int isLegal(String idcard){
    	if(idcard.length()<18) {
    		return 0;
    	}
        int a = 0;
        int sum = 0;
        char checkBit[]={'1','0','X','9','8','7','6','5','4','3','2'};
        int []add={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        char []stringArr = idcard.toCharArray();
        for (int i=0;i<17;i++){
            sum +=add[i]*(stringArr[i]-'0');
        }
        if (stringArr[17]==checkBit[sum%11]){
            a=1;
        }
        return a;
    }

    /**
     * 判断性别
     * @return 1-男;0-女;-1-错误;
     */
    public static byte sex(String idcard){

        if (isLegal(idcard)==1){
            char []stringArr = idcard.toCharArray();
            if (stringArr[17]%2==0){
                return MALE;
            }else{
                return FAMALE;
            }
        }
        return -1;
    }

    /**
     * 输出年月日
     * @return 年月日的字符串比如:20171207
     */
    public static String year(String idcard){
        String num=null;
        if (isLegal(idcard)==1){
            num = idcard.substring(6,14);
        }
        return num;
    }
	
	/**
	 * 判断字符串是否为空
	 * @param t
	 * @return
	 */
	public static boolean isNull(String t) {
		if(t==null||"".equals(t)) {
			return true;
		}else {
			return false;
		}
	}
	
	/**
	 * 判断是否为纯数字
	 * @param t
	 * @return
	 */
	public static boolean isNum(String t) {
		char ch;
		t=t.trim();
		for(int i=0,j=t.length();i<j;i++) {
			ch=t.charAt(i);
			if(!((ch>='0' && ch<='9'))) {
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 判断是否含有数字
	 * @param t
	 * @return
	 */
	public static boolean haveNum(String t) {
		char ch;
		t=t.trim();
		for(int i=0,j=t.length();i<j;i++) {
			ch=t.charAt(i);
			if(((ch>='0' && ch<='9'))) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 验证手机号
	 * @param phone
	 * @return
	 */
	public static boolean isPhone(String phone) {
	    String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
	    if (phone.length() != 11) {
	        return false;
	    } else {
	        Pattern p = Pattern.compile(regex);
	        Matcher m = p.matcher(phone);
	        boolean isMatch = m.matches();
	        return isMatch;
	    }
	}
}


银行卡验证:

/** 
        * 校验银行卡卡号 
        */  
       public static boolean checkBankCard(String bankCard) {  
            if(bankCard.length() < 15 || bankCard.length() > 19) {
                return false;
            }
            char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1));  
            if(bit == 'N'){  
                return false;  
            }  
            return bankCard.charAt(bankCard.length() - 1) == bit;  
       }  

       /** 
        * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 
        * @param nonCheckCodeBankCard 
        * @return 
        */  
       private static char getBankCardCheckCode(String nonCheckCodeBankCard){  
           if(nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0  
                   || !nonCheckCodeBankCard.matches("\\d+")) {  
               //如果传的不是数据返回N  
               return 'N';  
           }  
           char[] chs = nonCheckCodeBankCard.trim().toCharArray();  
           int luhmSum = 0;  
           for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {  
               int k = chs[i] - '0';  
               if(j % 2 == 0) {  
                   k *= 2;  
                   k = k / 10 + k % 10;  
               }  
               luhmSum += k;             
           }  
           return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');  
       }



评论区
请写下您的评论...
暂无评论...
猜你喜欢
工具 1683 java正则表达式同时或电话码importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPhone
工具 2163 javaweb图片码1.码的作用:防止恶意破解密码、刷票、论坛灌水、刷页。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用码是现在很多网站通行的方
official 876 《操作系统》信制的两种类型整形信量记录型信量复习回顾+思考:之前学习的这些进程互斥的解决方案分别存在哪些问题?进程互斥的四种软件实现方式(单标志法、双标志先检查、双标志后检查
框架 1162 /groupIdartifactIdkaptcha/artifactIdversion${kaptcha.version}/version/dependency生成码的配置类importcom.google
工具 2488 /versionclassifierjdk15/classifier/dependencydependency groupIdcom.aliyun/groupId artifactIdaliyun-java-sdk-core/
spring/springmvc 4167 我在之前进行接口开发的时候经常会有大量的参数,而我一般的操作方法就是在controller中进行参数的校,这样并没有什么错,但是代码略显臃肿,而使用springboot的@vaild注解可以减
rabbitmq 1112 登录auth_http.vhost_path虚拟主权限auth_http.resource_path校使用资源权限(交换,队列)auth_http.topic_path检查主题是否可以订阅
搜索 662 OpenSSL3.1.014Mar2023(Library:OpenSSL3.1.014Mar2023) 创建书密钥文件server.keyD:\tmp\sslopensslgenrsa-des3
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。