美文网首页
StringUtils(判空,随机串,手机号,判整数,判断身份证

StringUtils(判空,随机串,手机号,判整数,判断身份证

作者: Ukuleler | 来源:发表于2019-01-15 15:27 被阅读0次
public class StringUtils {

    /**
     * 判断字符串是否为空
     * 为空则返回true,否则返回false
     * @param str
     * @return
     */
    public static boolean isEmpty(String str){
            int strLen;
            if (str == null || (strLen = str.length()) == 0) {
                return true;
            }
            for (int i = 0; i < strLen; i++) {
                if (!Character.isWhitespace(str.charAt(i))){
                    return false;
                }
            }
            return true;
    }

    public static String getRandomString(int length){
    //产生随机数
    Random random=new Random();
    StringBuffer sb=new StringBuffer();
    //循环length次
    for(int i=0; i<length; i++){
        //产生0-2个随机数,既与a-z,A-Z,0-9三种可能
        int number=random.nextInt(3);
        long result=0;
        switch(number){
            //如果number产生的是数字0;
            case 0:
            //产生A-Z的ASCII码
            result=Math.round(Math.random()*25+65);
            //将ASCII码转换成字符
            sb.append(String.valueOf((char)result));
            break;
            case 1:
            //产生a-z的ASCII码
            result=Math.round(Math.random()*25+97);
            sb.append(String.valueOf((char)result));
            break;
            case 2:
            //产生0-9的数字
            sb.append(String.valueOf(new Random().nextInt(10)));
            break;
        }
    }
    return sb.toString();
    }

    public static boolean isPhone(String phone){
        String check = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$";
        Pattern regex = Pattern.compile(check);
        Matcher matcher = regex.matcher(phone);
        return matcher.matches();
    }

    public static boolean isNum(String key){
        Pattern digit = Pattern.compile("\\d+");
        return digit.matcher(key).matches();
    }

    public static boolean isCard(String cardNo){
        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 = cardNo.matches(regularExpression);

        //判断第18位校验值
        if (matches) {

            if (cardNo.length() == 18) {
                try {
                    char[] charArray = cardNo.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;
                    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
                        return true;
                    } else {
                        System.out.println("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
                                "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
                        return false;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("异常:" + cardNo);
                    return false;
                }
            }
        }
        return matches;
    }

    public static String byteToHex(byte b[]) {
        if (b == null) {
            throw new IllegalArgumentException(
                    "Argument b ( byte array ) is null! ");
        }
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0xff);
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

相关文章

网友评论

      本文标题:StringUtils(判空,随机串,手机号,判整数,判断身份证

      本文链接:https://www.haomeiwen.com/subject/hgjydqtx.html