常用工具类(一) 身份证+姓名+手机号码验证

参考网址

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

public class IdentityVerificationUtil {
    private static String[] vcity = {"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41",
            "42","43","44","45","46","50","51","52","53","54","61","62","63","64","65","71","81","82","91"};//省份代号
    public static boolean nameVerification (String name){
        if (name.length()<1) {
            return false;
        }
        String reg= "^(([a-zA-Z+\\.?\\·?a-zA-Z+]{2,30}$)|([\\u4e00-\\u9fa5+\\·?\\u4e00-\\u9fa5+]{2,30}$))";
        //判断用户输入的真实姓名是否为空
        if(name.length()>20){
            return false;
        }
        if(name.length()==0){
            return false;
        }
        //检测姓名的格式是否匹配
        else if(!Pattern.matches(reg,name)){
            return false;
        }
        else {
            return true;
        }
    }

    public static boolean phoneVerification (String phone){
        if (phone.length()<1) {
            return false;
        }
        String reg= "^1(3|4|5|6|7|8|9)\\d{9}$";
        if(!Pattern.matches(reg,phone)){
            return false;
        } else {
            return true;
        }
    }

    public static boolean idCardVerification (String idCard){
        if (idCard.length()<1) {
            return false;
        }
        //是否为空
        if ("".equals(idCard)) {
            return false;
        }
        //校验长度,类型
        String longTypeReg = "(^\\d{15}$)|(^\\d{17}(\\d|X)$)";
        if(!Pattern.matches(longTypeReg,idCard)) {
            return false;
        }
        //取身份证前两位,校验省份
        String checkProvince = idCard.substring(0,2);
        if (!Arrays.asList(vcity).contains(checkProvince)) {
            return false;
        }
        //检查生日是否正确
        if (!checkBirthday(idCard)) {
            return false;
        }
        //检验位的检测
        if(!checkParity(idCard)) {
            return false;
        }
        return true;
    }
    public static boolean checkBirthday(String idCard) {
        int len = idCard.length();
        //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
        if(len == 15)
        {
            String re_fifteen = "^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$";
            Pattern p = Pattern.compile(re_fifteen);
            Matcher arr_data = p.matcher(idCard);
            while (arr_data.find()) {
                int year = Integer.parseInt("19"+arr_data.group(2));
                int month = Integer.parseInt(arr_data.group(3));
                int day = Integer.parseInt(arr_data.group(4));
                Calendar birthday = Calendar.getInstance();
                birthday.set(year,month-1,day);
                return verifyBirthday(year, month, day, birthday);
            }
        }
        //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
        if(len == 18)
        {
            String re_eighteen = "^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$";
            Pattern p = Pattern.compile(re_eighteen);
            Matcher arr_data = p.matcher(idCard);
            while (arr_data.find()) {
                int year = Integer.parseInt(arr_data.group(2));
                int month = Integer.parseInt(arr_data.group(3));
                int day = Integer.parseInt(arr_data.group(4));
                //Date birthday = new Date(year+"/"+month+"/"+day);
                Calendar birthday = Calendar.getInstance();
                birthday.set(year,month-1,day);
                return verifyBirthday(year,month,day,birthday);
            }
        }
        return false;
    }

    public static boolean verifyBirthday(int year,int month,int day,Calendar birthday){
        Calendar now = Calendar.getInstance();
        int now_year = now.get(Calendar.YEAR);
//        int now_year = now.get(Calendar.MONTH);
//        int now_year = now.get(Calendar.DAY_OF_MONTH);
        if(birthday.get(Calendar.YEAR) == year && (birthday.get(Calendar.MONTH)+1) == month && birthday.get(Calendar.DAY_OF_MONTH) == day)
        {
            //判断年份的范围(3岁到100岁之间)
            int time = now_year - year;
            if(time >= 3 && time <= 100)
            {
                return true;
            }
            return false;
        }
        return false;
    }

    public static boolean checkParity(String card){
        //15位转18位
        card = changeFivteenToEighteen(card);
        int len = card.length();
        if(len == 18)
        {
            int[] arrInt = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
            String[] arrCh = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
            int cardTemp = 0;
            for(int i = 0; i < 17; i ++)
            {
                cardTemp += Integer.parseInt(card.substring(i, i+1)) * arrInt[i];
            }
            String valnum = arrCh[cardTemp % 11];
            if (valnum.equals( card.substring(17, 18)))
            {
                return true;
            }
            return false;
        }
        return false;
    }

    public static String changeFivteenToEighteen(String card){
        if(card.length() == 15) {
            int[] arrInt = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
            String[] arrCh = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
            int cardTemp = 0;
            card = card.substring(0, 6) + "19" + card.substring(6, card.length());
            for(int i = 0; i < 17; i ++) {
                cardTemp += Integer.parseInt(card.substring(i, i+1) )* arrInt[i];
            }
            card += arrCh[cardTemp % 11];
            return card;
        }
        return card;
    }

    public static void main(String[] args) {
        System.out.println(nameVerification("孙策"));
        System.out.println(phoneVerification("15857324581"));//true
        System.out.println(idCardVerification("330781198502074555"));//true
        //System.out.println(idCardVerification("110503671231001"));//true
    }
}

正则的两个常用方法
1.是否匹配  Pattern.matches(reg,name)      //return true,false
2. 正则筛选的字符串
String re_fifteen = "^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$";
            Pattern p = Pattern.compile(re_fifteen);
            Matcher arr_data = p.matcher(idCard);
            while (arr_data.find()) {
                int year = Integer.parseInt("19"+arr_data.group(2));
                int month = Integer.parseInt(arr_data.group(3));
                int day = Integer.parseInt(arr_data.group(4));
                Calendar birthday = Calendar.getInstance();
                birthday.set(year,month-1,day);
                return verifyBirthday(year, month, day, birthday);
            }

js前端验证

layui.use(['form', 'element', 'layer', 'jquery'], function () {
    var $ = layui.jquery;
    var form = layui.form;



    //自定义验证规则
    form.verify({
        orderName: function (value) {
            if (value.length < 1) {
                return '姓名不能为空';
            }
            if (!checkTrueName(value)) {
                return '请输入真实姓名';
            }
        },
        orderPhone: function (value) {
            if (value.length < 1) {
                return '手机号码不能为空';
            }
            if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(value))) {
                return "请输入有效的手机号码";
            }
        }, orderIdCard: function (value) {
            if (value.length < 1) {
                return '身份证不能为空';
            }

            if (!checkCard(value)) {
                return '请输入有效的身份证!';
            }
        }
    });

    form.on('submit(formDemoGO)', function (data) {
        var index = layer.load();

        $.ajax({
            url: "mask/order?entryId="+ new Date().getTime(),
            data : JSON.stringify(data.field),
            dataType: 'json',
            contentType: "application/json;charset-UTF-8",
            type:  'post',
            success: function(result){
                var msg = result.msg;
                if(msg == null ){
                    msg="";
                }
                var state = result.state;
                if(state == null ){
                    state="";
                }
                layer.close(index);
                if(1==state){
                    window.location.href = '/successView?oaprPickStartTime='+result.userInfo.oaprPickStartTime
                        +'&oaprPickEndTime='+result.userInfo.oaprPickEndTime
                        +'&storeUuid='+result.storeInfo.uuid
                        +'&userId='+result.userInfo.oaprUuid;
                }else{
                    window.location.href = '/errorView?state='+state+'&msg='+msg+'&isSuccess='+result.isSuccess;
                }

            },error:function(){
                layer.close(index);
                window.location.href = '/errorView?state=4&msg=系统繁忙,请稍候!&isSuccess=false';
            }
        });

        return false;

    });
});

function checkTrueName(str) {
          
            var reg= /^(([a-zA-Z+\.?\·?a-zA-Z+]{2,30}$)|([\u4e00-\u9fa5+?\u4e00-\u9fa5+]{2,30}$))/;
            //判断用户输入的真实姓名是否为空
			if(str.length>20){
 
                return false;
            }
            if(str.length==0){
 
                return false;
            }
            //检测姓名的格式是否匹配
             else if(!reg.test(str)){
 
                return false;
            }
            else {
                return true;
            }
        } 
 



var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",  
            21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",  
            33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",  
            42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",  
            51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",  
            63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"  
           };  
  
  function checkCard(card)  
{  
 
    //是否为空  
    if(card === '')  
    {  
       
        
        return false;  
    }  
    //校验长度,类型  
    if(isCardNo(card) === false)  
    {  
      
        
        return false;  
    }  
    //检查省份  
    if(checkProvince(card) === false)  
    {  
        
        
        return false;  
    }  
    //校验生日  
    if(checkBirthday(card) === false)  
    {  
   
        return false;  
    }  
    //检验位的检测  
    if(checkParity(card) === false)  
    {  
 
        return false;  
    }  
 
    return true;  
};  
  
  
//检查号码是否符合规范,包括长度,类型  
isCardNo = function(card)  
{  
    //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  
    var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;  
    if(reg.test(card) === false)  
    {  
          
        return false;  
    }  
  
    return true;  
};  
  
//取身份证前两位,校验省份  
checkProvince = function(card)  
{  
    var province = card.substr(0,2);  
    if(vcity[province] == undefined)  
    {  
        return false;  
    }  
    return true;  
};  
  
//检查生日是否正确  
checkBirthday = function(card)  
{  
    var len = card.length;  
    //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字  
    if(len == '15')  
    {  
        var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;  
        var arr_data = card.match(re_fifteen);  
        var year = arr_data[2];  
        var month = arr_data[3];  
        var day = arr_data[4];  
        var birthday = new Date('19'+year+'/'+month+'/'+day);  
        return verifyBirthday('19'+year,month,day,birthday);  
    }  
    //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X  
    if(len == '18')  
    {  
        var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;  
        var arr_data = card.match(re_eighteen);  
        var year = arr_data[2];  
        var month = arr_data[3];  
        var day = arr_data[4];  
        var birthday = new Date(year+'/'+month+'/'+day);  
        return verifyBirthday(year,month,day,birthday);  
    }  
    return false;  
};  
  
//校验日期  
verifyBirthday = function(year,month,day,birthday)  
{  
    var now = new Date();  
    var now_year = now.getFullYear();  
    //年月日是否合理  
    if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)  
    {  
        //判断年份的范围(3岁到100岁之间)  
        var time = now_year - year;  
        if(time >= 3 && time <= 100)  
        {  
            return true;  
        }  
        return false;  
    }  
    return false;  
};  
  
//校验位的检测  
checkParity = function(card)  
{  
    //15位转18位  
    card = changeFivteenToEighteen(card);  
    var len = card.length;  
    if(len == '18')  
    {  
        var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
        var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  
        var cardTemp = 0, i, valnum;  
        for(i = 0; i < 17; i ++)  
        {  
            cardTemp += card.substr(i, 1) * arrInt[i];  
        }  
        valnum = arrCh[cardTemp % 11];  
        if (valnum == card.substr(17, 1))  
        {  
            return true;  
        }  
        return false;  
    }  
    return false;  
};  
  
//15位转18位身份证号  
changeFivteenToEighteen = function(card)  
{  
    if(card.length == '15')  
    {  
        var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
        var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  
        var cardTemp = 0, i;    
        card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);  
        for(i = 0; i < 17; i ++)  
        {  
            cardTemp += card.substr(i, 1) * arrInt[i];  
        }  
        card += arrCh[cardTemp % 11];  
        return card;  
    }  
    return card;  
};  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值