Collission probability: 1 in 2**40 (if Random numbers are actually random)
Having the createUniqueName method synchronized might be slower, but ensures
that count is always incremented for every name generated; even if the PRNG
unexpectedly fails.
We're not using SecureRandom here though, due to issues with the Unit Tests
otherwise hanging without any apparent reason. Also only 16 characters per
generated ID to avoid database field limits.
Change-Id: I52668471aa82e44981a3410d3f271f1a261c5dc6
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
+import java.util.Random;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
- public static String createUniqueName() {
- return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
+ public static String createRandomIDString() {
+ final char[] chars = "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
+ final int idStringLength = 16;
+
+ Random sr;
+ sr = new Random();
+
+ StringBuilder sb = new StringBuilder(idStringLength);
+ for (int i = 0; i < idStringLength; i++) {
+ sb.append(chars[sr.nextInt(chars.length)]);
+ }
+
+ return sb.toString();
+ }
+
+ public static synchronized String createUniqueName() {
+ return "test" + createRandomIDString() + "a" + (count++) + "u";
}
public static int countRegex(String text, String pattern) {
}
public static int countRegex(String text, String pattern) {