package com.doumee.core.utils; 
 | 
  
 | 
import java.security.SecureRandom; 
 | 
import java.util.Locale; 
 | 
import java.util.Objects; 
 | 
import java.util.Random; 
 | 
  
 | 
public class RandomString { 
 | 
  
 | 
  protected static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
 | 
  protected static final String lower = upper.toLowerCase(Locale.ROOT); 
 | 
  protected static final String digits = "0123456789"; 
 | 
  protected static final String alphaNumeric = upper + lower + digits; 
 | 
  private final Random random; 
 | 
  private final char[] symbols; 
 | 
  private final char[] buf; 
 | 
  
 | 
  public RandomString(int length, Random random, String symbols) { 
 | 
    if (length < 1) { 
 | 
      throw new IllegalArgumentException(); 
 | 
    } 
 | 
    if (symbols.length() < 2) { 
 | 
      throw new IllegalArgumentException(); 
 | 
    } 
 | 
    this.random = Objects.requireNonNull(random); 
 | 
    this.symbols = symbols.toCharArray(); 
 | 
    this.buf = new char[length]; 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Create an alphanumeric string generator. 
 | 
   */ 
 | 
  public RandomString(int length, Random random) { 
 | 
    this(length, random, alphaNumeric); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Create an alphanumeric strings from a secure generator. 
 | 
   */ 
 | 
  public RandomString(int length) { 
 | 
    this(length, new SecureRandom()); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Create session identifiers. 
 | 
   */ 
 | 
  public RandomString() { 
 | 
    this(21); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Generate a random string. 
 | 
   */ 
 | 
  public String nextString() { 
 | 
    for (int idx = 0; idx < buf.length; ++idx) { 
 | 
      buf[idx] = symbols[random.nextInt(symbols.length)]; 
 | 
    } 
 | 
    return new String(buf); 
 | 
  } 
 | 
} 
 |