首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成具有特定需求的随机字符串

生成具有特定需求的随机字符串
EN

Stack Overflow用户
提问于 2021-02-01 09:49:45
回答 1查看 501关注 0票数 1

我正试图在以下具体条件下生成检察官办公室:

  1. OTP必须至少有一个小写字符。
  2. OTP必须至少有一个大写字符
  3. OTP必须至少有1或2个数字
  4. OTP长度应该是8个字符。

我试过以下方法

代码语言:javascript
复制
import java.security.SecureRandom;
import org.apache.commons.lang3.RandomStringUtils;

public class TestJava {
    public static void main(String []args){
        char[] allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
        SecureRandom random = new SecureRandom();
        int SIZE = 8;
        // Try- 1
        String opt1 = RandomStringUtils.random(SIZE, 0, 0, true, true, allowedChars, random);
        // Try - 2
        String opt2 = RandomStringUtils.randomAlphanumeric(8);
        // Try - 3
        String opt3 = RandomStringUtils.random(8, true, true);
    }
}

也尝试过来自https://www.techiedelight.com/generate-random-alphanumeric-password-java/的解决方案

但经过4-5的尝试,它是生成密码没有编号(S),即条件3是不满足的。

所以,请您告诉我如何实现给定的功能。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-01 12:58:37

可以尝试以下操作,并在给定条件下生成字符串。

还可以对代码进行一些进一步的优化,但注意到每个字符在达到强制条件(除了长度为停止条件)后都有相当的发生概率。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RandomStr 
{
    public static void main(String args[]) 
    {
        RandomStr r = new RandomStr();
        for(int i=0;i<10;i++)
            System.out.println(r.new MyRandom().getRandom());
    }
    class MyRandom
    {
        char[] upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
        char[] lower = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        int Size = 8;
        
        
        public String getRandom()
        {
            String str="";
            boolean flag= true;
            while(flag)
            {
                if(str.length()<2 && flag==true)
                {
                    str+=(int)(10*Math.random());
                    flag = ((int)(2*Math.random())==1) ? true : false;
                }
                else
                {
                    flag = false;
                }
            }
            str += upper[(int)(upper.length*Math.random())];
            str += lower[(int)(lower.length*Math.random())];
            
            while(str.length()<8)
                str+= ((int)(2*Math.random())==1) ? upper[(int)(upper.length*Math.random())] : lower[(int)(upper.length*Math.random())];
            //reorder string
            List<Character> list= new ArrayList<Character>();
            char[] cList= str.toCharArray();
            for(int i=0;i<cList.length;i++)
                list.add(cList[i]);
            Collections.shuffle(list);
            str="";
            for(char c: list)
            {
                str+=c;
            }
            return str;
        }
        
    }
}

输出:

代码语言:javascript
复制
7OROFjHM
3Sn2jlki
QsTf6IYB
Ps09QrbN
93OdRlOX
6JBSdjdk
mg4Qtk0J
Dp31nHJQ
RrDnkYH5
Ik4ed3se
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65990470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档