java中獲取字母和數字的組合


package com.ccytsoft.wkc.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 生成隨機碼
 * <P>
 * 獲取大寫字母,小寫字母和數字的任意組合的隨機碼   
 *
 * @author kuangxiang(kuangxiang666@yeah.net)
 * @Date 15:20 2017/12/13
 */
public class AlgorithmUtil {

    /**
     *獲取隨機編碼
     * <P>
     * 獲取大寫字母,小寫字母和數字的任意組合的隨機碼    
     *
     * @param length 要生成字符串的長度
     * @param isPureDigits 生成的隨機碼是否是純數字 true:表示存數字,false:表示純字母,null:表示字母和數字均可
     * @param isUpperCase  生成的隨機碼是否大寫  如果isPureDigits的值不為true時,此值有效 true:表示大寫,false:表示小寫,null:表示大小寫都可以
     * @param  isTogether 字母和數字是否必須同時存在 isPureDigits的值為null時,此值有效 true:是,false:否
     *
     * @return 生成的字符竄
     */
    public static String getCode(int length,Boolean isPureDigits,Boolean isUpperCase,boolean isTogether) {
        String val = "";
        Random random = new Random();
        for(int i = 0; i < length; i++){
            //是否需要純數字或者純字母
            String charOrNum = "";
            if(isPureDigits!=null){
                charOrNum= isPureDigits ? "num":"char";
            }else{
                charOrNum=random.nextInt(2) % 2 == 0 ? "char" : "num"; // 輸出字母還是數字
            }
            //獲取字符或者數字
            if("char".equalsIgnoreCase(charOrNum)) {
                val += (char) (getChoice(isUpperCase, random) + random.nextInt(26));
            }else if("num".equalsIgnoreCase(charOrNum)) {
               // 數字
                val += String.valueOf(random.nextInt(10));
            }
            //字符和數字是否需要同時存在
            if(isPureDigits==null&isTogether){
                if(val.length()==length-1){
                    if(isPureAlphabet(val)){
                        val+=String.valueOf(random.nextInt(10));
                        break;
                    }
                    if(isPureDigits(val)){
                        val += (char) (getChoice(isUpperCase, random)  + random.nextInt(26));
                        break;
                    }
                }
            }
        }
        return val;
    }

    /**
     * 獲取隨機編碼的集合
     *
     * @param length 隨機編碼的長度
     * @param num 想要獲取書籍編碼的個數
     * @param isPureDigits 是否是純數字 true:表示存數字,false:表示純字母,null:表示字母和數字均可
     * @param isUpperCase 是否大寫  ,如果生成的字符串中有字母,可以設置值,true:表示大寫,false:表示小寫,null:表示大小寫都可以
     * @param  isTogether 字母和數字是否必須同時存在 true:是,false:否
     * @return
     */
    public static List<String> genCodes(int length, long num,Boolean isPureDigits,Boolean isUpperCase,boolean isTogether){
        List<String> results=new ArrayList<String>();
        for(int j=0;j<num;j++){
            String val = getCode( length,isPureDigits,isUpperCase,isTogether);
            //val=val.toLowerCase();
            if(results.contains(val)){
                continue;
            }else{
                results.add(val);
            }
        }
        return results;
    }

    /**
     * 生成驗證碼
     *
     * @param  codeLength 編碼長度
     *
     * @return 驗證碼字符竄
     */
    public static String getVerifyCode(int codeLength) {
        int i;
        int count = 0;
        char[] str = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        StringBuffer pwd = new StringBuffer("");
        Random r = new Random();
        while (count < codeLength) {
            i = Math.abs(r.nextInt(str.length));
            if (i >= 0 && i < str.length) {
                pwd.append(str[i]);
                count++;
            }
        }
        return pwd.toString();
    }

    /**
     * 獲取字母對應的數值
     *
     * @param isUpperCase 是否大寫  ,如果生成的字符串中有字母,可以設置值,true:表示大寫,false:表示小寫,null:表示大小寫都可以
     * @param random 隨機數
     *
     * @return 數值
     */
    private static int getChoice(Boolean isUpperCase, Random random) {
        int choice=0;
        // 字符串
        if(isUpperCase!=null){
            choice = isUpperCase  ? 65 : 97;
        }else {
            choice= random.nextInt(2) % 2 == 0 ? 65 : 97; //取得大寫字母還是小寫字母
        }
        return choice;
    }

    /**
     * 是否是純數字
     *
     * @param str 需要檢查的字符竄

     * @return true:是  false:否
     */
    private static boolean isPureDigits(String str) {
        // String regExp =
        // "^[A-Za-z]+(([0-9]+[A-Za-z0-9]+)|([A-Za-z0-9]+[0-9]+))|[0-9]+(([A-Za-z]+[A-Za-z0-9]+)|([A-Za-z0-9]+[A-Za-z]+))$";
        String regExp = "^([0-9]+)$";
        Pattern pat = Pattern.compile(regExp);
        Matcher mat = pat.matcher(str);
        return mat.matches();
    }

    /**
     * 是否是純字母
     *
     * @param str 需要檢查的字符竄
     *
     * @return true :是   false:否
     */
    private static boolean isPureAlphabet(String str) {
        // String regExp =
        // "^[A-Za-z]+(([0-9]+[A-Za-z0-9]+)|([A-Za-z0-9]+[0-9]+))|[0-9]+(([A-Za-z]+[A-Za-z0-9]+)|([A-Za-z0-9]+[A-Za-z]+))$";
        String regExp = "^([A-Za-z]+)$";
        Pattern pat = Pattern.compile(regExp);
        Matcher mat = pat.matcher(str);
        return mat.matches();
    }

    /**
     * 測試類
     *
     * @param  args 參數
     *
     */
    public static void main(String[] args) {
        boolean pureDigits1 = isPureDigits("6003l8");
        System.out.println("pureDigits的值"+pureDigits1);
        // TODO Auto-generated method stub
        List<String> results=genCodes(6,100,null,false,true);
        System.out.println("results的值"+results);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM